配置tensorflow2.8可供远程连接的docker容器

配置tensorflow2.8可供远程连接的docker容器

  • 1. 从docker hub上下载官方镜像
  • 2. 运行镜像
  • 3. 进入docker容器内部
    • 3.1 查看Ubuntu系统版本
    • 3.2 给Ubuntu设置国内源
    • 3.3 给Ubuntu安装vim编辑器
    • 3.4 给Ubuntu安装ssh服务
      • 3.4.1 下载openssh-server
      • 3.4.2 配置密码
      • 3.4.3 修改配置文件
      • 3.4.3 启动ssh服务
      • 3.4.4 设置开机自启动ssh服务
    • 3.5 配置jupyter notebook
    • 3.6 使用pip安装OpenCV
    • 3.7 使用pip安装scipy
    • 3.8 使用pip安装pandas
    • 3.9 使用pip安装matplotlib
    • 3.10 使用pip安装sklearn
    • 3.11 使用pip安装jieba
    • 3.12 使用pip安装nltk
  • 4. 提交为新的镜像
  • 5. 用PyCharm连接远程开发环境,并启用jupyter notebook
    • 5.1 启动容器
    • 5.2 PyCharm远程连接
    • 5.3 启用jupyter notebook
    • 5.4 登陆jupyter notebook
  • 6. 补充
    • 6.1 几种docker启动的方法
      • 6.1.1 普通启动支持CPU
      • 6.1.2 支持GPU的docker启动方式
    • 6.2 验证容器内tensorflow2.8是否可执行
    • 6.3 查找tensorflow2.8官方文档,搭建深度学习模型

1. 从docker hub上下载官方镜像

docker hub网站

docker pull tensorflow/tensorflow:2.8.0-gpu-jupyter
#或者
docker pull tensorflow/tensorflow:2.8.0

2. 运行镜像

  • 添加-it 参数交互运行
  • 添加-d参数后台运行
docker run -dit --rm tensorflow/tensorflow:2.8.0-gpu-jupyter bash
#或者
docker run -dit --rm tensorflow/tensorflow:2.8.0 bash

3. 进入docker容器内部

比如CONTAINER ID为:c96d56145259

docker exec -it c96d56145259 bash

3.1 查看Ubuntu系统版本

cat /etc/issue

在这里插入图片描述

3.2 给Ubuntu设置国内源

设置apt-get国内源是为了加快下载速度,访问镜像站页面,选择对应版本制作new_sources.list文件。
配置tensorflow2.8可供远程连接的docker容器_第1张图片
将new_sources.list文件粘贴于容器 /etc/apt/sources.list.d目录内。在Ubuntu下软件源的文件是/etc/apt/sources.list,而sourdces.list.d目录下的文件是第三方软件的源,可以分别存放不同的第三源地址,只需“扩展名”为list即可。

docker cp new_sources.list c96d56145259:/etc/apt/sources.list.d/new_sources.list 

在这里插入图片描述

3.3 给Ubuntu安装vim编辑器

apt-get update
apt-get install vim

3.4 给Ubuntu安装ssh服务

3.4.1 下载openssh-server

若下载的镜像内没有ssh,则pycharm远程连接访问不了(容器内没有22端口),需要给镜像配置ssh服务。

#安装ssh
apt-get update
apt-get install openssh-server
#查看ssh服务状态
service ssh status
#查看ssh版本
ssh -V

3.4.2 配置密码

为容器配置管理员密码(外部连接ssh服务时会用到),此处设置密码为123456,默认用户名为root

# 终端输入以下命令
passwd
# New password: 输入密码123456
# Retype new password:再次输入密码123456
# passwd: password updated successfully 表示密码设置成功

3.4.3 修改配置文件

修改容器内ssh的配置文件/etc/ssh/sshd_config(注意,不是ssh_config)

# 修改如下两个地方
PermitRootLogin yes
UsePAM no

配置tensorflow2.8可供远程连接的docker容器_第2张图片

3.4.3 启动ssh服务

service ssh restart

在这里插入图片描述

3.4.4 设置开机自启动ssh服务

容器重启后,ssh服务并不能跟着重启,需要手动进入容器执行命令才可以重启。我们使用脚本的形式将ssh设为自启,只不过这个的这个脚本和我们使用Dockerfile的脚本不一样。

  • 在 /root 目录下新建一个 start_ssh.sh文件,并给予该文件可执行权限。
touch /root/start_ssh.sh
chmod +x /root/start_ssh.sh
vim /root/start_ssh.sh
  • start_ssh.sh 脚本的内容,如下:
#!/bin/bash
 
LOGTIME=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$LOGTIME] startup run..." >>/root/start_ssh.log
service ssh start >>/root/start_ssh.log
#service mysql start >>/root/star_mysql.log   //其他服务也可这么实现
  • 将start_ssh.sh脚本添加到启动文件中
vim /root/.bashrc
  • 在 .bashrc 文件末尾加入如下内容:
# startup run
if [ -f /root/start_ssh.sh ]; then
      . /root/start_ssh.sh
fi

注意. /root中间有空格
原文链接:https://blog.csdn.net/qq_38603541/article/details/124028994

3.5 配置jupyter notebook

jupyter notebook在此容器内已经安装好了。如果没安装,使用下面命令安装。

pip3 install jupyter
  • 生成jupyter配置文件:/root/.jupyter/jupyter_notebook_config.py
#生成配置文件
jupyter notebook --generate-config
#使用ipython生成密码
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password: 123456
Verify password: 123456
Out[2]: 'argon2:$argon2id$v=19$m=10240,t=10,p=8$blILhJPwrQi4cINiIoHIHw$ylvBE3m2OyIdCjnP5l/FPGvvLXu1SXTVrCeIFa1EsAw'
#去配置文件.jupyter/jupyter_notebook_config.py中修改以下参数
c.NotebookApp.notebook_dir = '/tf'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.allow_root = True
c.NotebookApp.port = 8888
c.NotebookApp.password = u'argon2:$argon2id$v=19$m=10240,t=10,p=8$blILhJPwrQi4cINiIoHIHw$ylvBE3m2OyIdCjnP5l/FPGvvLXu1SXTVrCeIFa1EsAw'

原文链接:https://blog.csdn.net/leng_yan/article/details/87208363

3.6 使用pip安装OpenCV

  • opencv-python: 只包含opencv库的主要模块,一般不推荐安装。
  • opencv-contrib-python: 包含主要模块和contrib模块,功能基本完整,推荐安装。
pip3 install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

验证是否可用。如果成功导入opencv包并打印相应opencv的版本就说明安装成功了。

import cv2
print(cv2.__version__)

如果报如下错误,其实就是新容器缺少依赖,安装一下就行了。
在这里插入图片描述

apt-get update
apt-get install libgl1-mesa-glx

3.7 使用pip安装scipy

pip3 install scipy

3.8 使用pip安装pandas

pip3 install pandas

3.9 使用pip安装matplotlib

matplotlib在此容器内已经安装好了。如果没安装,使用下面命令安装。

pip3 install -U matplotlib

-U参数等同于--upgrade,表示如果已安装,则升级到最新版本。

3.10 使用pip安装sklearn

pip3 install -U sklearn

-U参数等同于--upgrade,表示如果已安装,则升级到最新版本。

3.11 使用pip安装jieba

中文分词

pip3 install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple

3.12 使用pip安装nltk

外文分词

pip3 install nltk -i https://pypi.tuna.tsinghua.edu.cn/simple

4. 提交为新的镜像

比如CONTAINER ID为:c96d56145259

docker commit -a "dpc" -m "tensorflow2.8_add_ssh, passwd=123456" c96d56145259 dpc_tensorflow2.8_env:001

-a指定作者信息,-m指定描述信息,新镜像名称为 dpc_tensorflow2.8_env:001

5. 用PyCharm连接远程开发环境,并启用jupyter notebook

5.1 启动容器

docker run -dit --rm -p 5023:22 -p 5024:8888 --name my_tf_env dpc_tensorflow2.8_env:001

--rm表示容器停止时,会自动删除容器

5.2 PyCharm远程连接

启动容器后,用PyCharm专业版远程连接宿主机ip的5023端口。
配置tensorflow2.8可供远程连接的docker容器_第3张图片
配置tensorflow2.8可供远程连接的docker容器_第4张图片
启动docker的宿主机ip为192.168.18.192,宿主机5023端口映射docker内22端口
配置tensorflow2.8可供远程连接的docker容器_第5张图片
配置tensorflow2.8可供远程连接的docker容器_第6张图片
配置tensorflow2.8可供远程连接的docker容器_第7张图片
成功啦!
配置tensorflow2.8可供远程连接的docker容器_第8张图片

5.3 启用jupyter notebook

进入容器内(此时CONTAINER ID为:a048eb77fbaa)

docker exec -it a048eb77fbaa bash

在容器内运行以下命令,启动jupyter notebook服务

jupyter notebook

配置tensorflow2.8可供远程连接的docker容器_第9张图片

5.4 登陆jupyter notebook

浏览器访问xxx.xxx.xxx.xxx:5024
(xxx.xxx.xxx.xxx为docker宿主机的ip地址)
输入密码:123456
配置tensorflow2.8可供远程连接的docker容器_第10张图片
配置tensorflow2.8可供远程连接的docker容器_第11张图片

6. 补充

6.1 几种docker启动的方法

6.1.1 普通启动支持CPU

#启动容器的同时,在容器中打开bash shell会话
docker run -it --rm tensorflow/tensorflow:2.8.0 bash
#启动容器的同时,在容器中启动Jupyter Notebook服务
docker run -it --rm -p 8888:8888 tensorflow/tensorflow:2.8.0-gpu-jupyter
#启动容器的同时,在容器中运行tf_practice_2.py程序
docker run -it --rm -v /home/tarena/hello/tf/ceshi:/tmp -w /tmp tensorflow/tensorflow:2.8.0 python ./tf_practice_2.py

备注:

  1. tensorflow/tensorflow:2.8.0是在docker hub网站上下载的镜像,没有自己添加配置新内容。
  2. -w指定容器中的工作目录

6.1.2 支持GPU的docker启动方式

  • 查看显卡型号
lspci |grep -i nvidia
#或者
lspci |grep -i vga

备注: -i是忽略大小写;一第条命令是查看NVIDIA显卡,第二条命令是查看显卡,都可以用。

  • 查看linux系统有没有安装NVIDIA驱动(查看NVIDIA驱动是否安装成功)
nvidia-smi
  • 运行tensorflow的GPU映像
docker run --gpus all -it --rm tensorflow/tensorflow:2.8.0-gpu-jupyter bash
#或者
docker run --runtime=nvidia -it --rm tensorflow/tensorflow:2.8.0-gpu-jupyter bash
#或者

备注:

  1. docker在19.03版本之后,可以不用安装nvidia-docker,就能获得GPU的计算支持。
  2. 若出现报错,需要按顺序执行以下代码,安装nvidia-container-toolkit来解决。
#添加nvidia-docker的源,否则安装nvidia-container-toolkit时会报错
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
#安装nvidia-container-toolkit
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
#重启docker
sudo systemctl restart docker

原文链接:https://blog.csdn.net/u013685264/article/details/123206768
原文链接:https://segmentfault.com/a/1190000038726907

  • 验证nvidia-docker效果
docker run --gpus all --rm nvidia/cuda nvidia-smi
备注:
v2版本使用 --runtime=nvidia 替换 --gpus all
v1版本使用 nvidia-docker 替换 --gpus all

6.2 验证容器内tensorflow2.8是否可执行

import tensorflow as tf
res=tf.reduce_sum(tf.random.normal([10,10]))
print(res)

6.3 查找tensorflow2.8官方文档,搭建深度学习模型

tensorflow2.8官方文档网站,也可以选择查看不同版本的文档

你可能感兴趣的:(python)