Docker 心经
作者 | 刚子
出品 | 刚子
以下是我在使用过程中
遇到的坑
解决的问题
一些总结
其中还有很多不足,大家可以慢慢一起完善
安装
建议 ubuntu16.4/18.4,安装说明自行百度不做介绍
测试可用
检验 cuda 是否安装正确 & 能否被 pytorch 检测到
测试 pytorch 能不能调用 cuda 加速
基本操作
基础命令
镜像可取 docker hub 自行下载 不做介绍
查看 docker 服务是否启动:
systemctl status docker
启动 docker 服务:
sudo systemctl start docker
查看 docker 版本信息
docker --version
docker version
docker info
🌈 重要的命令
加载
docker load -i name
🔥 查看镜像
docker iamges
🔥 查看正在运行的容器
docker ps
🔥 查看容器
docker ps -a
进入容器
docker attach name
🔥
docker exec -it name bash
推荐这个 退出容器不会停止查看 conda 环境
conda env list
conda info --envs
激活 conda 环境
conda activate name
🔥 强制删除正在运行的容器
docker rm --force name
将镜像导出
docker save 镜像id>~/wg/ERN.tar
docker save 镜像名称:版本号 -o /home/outpainting-wg.tar
在集群中导入镜像
docker load -i ~/wg/name
docker load < ~/wg/wg-op.tar
加载进来的镜像名称、标签均为 none,修改名称与标签
docker tag eb40dcf64078 wg-op:torch1.5.0-cu101
🔥将容器打包成镜像
docker commit 容器ID 新镜像名称:版本号
如
docker commit 9e4fcf42be59 lvshasha_tensorflow:v1
在 docker images 时就会出现 lvshasha_tensorflow 这个镜像
🔥挂载
如果挂载多个目录,-v 可以多次使用
-v /home/my:/my -v ./home/ht:ht
将本地代码文件夹 传入到 docker 内部容器内
docker cp /home/wg/outpaiting/demo/Outpainting-master.tar.gz 容器名称:/home/wg/demo/code
🔥端口映射
-P 本机端口:容器端口
-p 2222:22 因为用到 22 端口映射所以必须安装 ssh 服务使用时通过访问服务器的 2222 端口来访问容器
ctrl+p+q
代码跑起来之后,ctrl+p+q 可以退出容器,但是还保持运行的状态使用 docker attach 容器名称 重新进入
创建容器
docker 版本不同,调用 gpu 的命令不同
docker run -id --gpus all -p 2225:22 --name wg -v ~/wg/outpainting/demo:/demo -v /datasets/places365/train:/demo/train -v /datasets/places365/test:/demo/test wg-op:torch1.2 /bin/bash
nvidia-docker run -id -p 2225:22 --name wg -v ~/wg/outpainting/demo:/demo -v /datasets/places365/train:/demo/train -v /datasets/places365/test:/demo/test wg-op:torch1.2 /bin/bash
🎯 Pycharm 远程调用 docker
直接调用 docker 容器我们是做不到的,但是可以做到间接调用 localhost -> remote server -> docker
1. 建立容器
nvidia-docker run -id -p 2225:22 --name wg -v ~/wg/outpainting/demo:/demo -v /datasets/places365/train:/demo/train -v /datasets/places365/test:/demo/test wg-op:torch1.2 /bin/bash
大家使用时直接将这个命令复制下来,红色部分原封不动,其他部分替换为自己的就可以了如果 docker 版本为 XX 时,将nvidia-docker
换为docker --gpus all
即可。
2. 安装 openssh-server
在远程服务器上安装 openssh-server
apt update && apt install openssh-server
注意,要在两个地方安装
远程服务器
容器内
3. 建立连接
进入容器修改 SSH 连接的密码默认账户为 root
passwd
容器内部重启 ssh 服务
service ssh restart
在服务器中测试容器与服务器上的映射是否建立
docker port <容器名字> 22
若输出,表明只要外界连接到服务器的 2222 端口,就会转发到容器的 22 端口0.0.0.0:2222
4. 本地测试连接是否建立
ssh root@<你服务器的ip地址> -p 2222
若成功 则直接连接至容器
第 2,3,4 步骤在设置一次后,将该容器导出为镜像再创建这个镜像的容器,即已经拥有 ssh 只需要进入容器设置密码,重启即可,随后在 pycharm 设置就可以
5. 配置 pycharm
配置 SFTP
在导航栏中 Tools > Depolyment > Configuration 中添加配置 SFTP。 如图
添加配置 SFTP,点击弹窗左上角的+号。选择 SFTP,根据自己的实际情况进行配置。
PS:这里的 root 密码就是之前设置好的 test
配置 SFTP 中的 mapping
都配置完之后。打开自动上传功能 Tools>Depolyment>Automatic Upload(always) 本地修改好代码只要按保存键就自动将本地代码上传至远程 docker container 中。 到这里已经配置好代码的自动同步了。还差最后一步,远程调试就配置成功。
Pycharm 链接远程 docker container (配置远程编译器)
添加新编译器(远程 docker container 编译器)
在打开的页面选择之前配置好的 SFTP
通常选择完之后下面有两个选项
Create: 新建 SFTP
Move: 将选择的 SFTP 作为编译器的 SFTP
选择你需要使用的解释器,通常选择 Move 就好
上面已经配置了 mapping,选择了 move 之后,项目位置就会自动映射。
完结🎉
补充知识
linux 操作
查看 CUDA 版本:
cat /usr/local/cuda/version.txt
查看 CUDNN 版本:
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
统计文件夹下文件个数,包括子文件
ls -lR | grep "^-"| wc -l
统计文件夹中目录个数
ls -l ./|grep "^d"|wc -l
判断是否有网
集群本地
ping www.baidu.com
容器内部
curl www.baidu.com
Linux 删除目录
递归删除目录的所有文件rm -rf xxx
编辑文件的两种方式
gedit
vim
查看线程命令
ps -aux
杀死线程命令
kill pid
SCP
使用 ssh 的 scp 服务传输文件
sudo scp /home/outpainting-wg.tar 你的账号@你的ip地址:~/
scp ERN.tar 你的账号@你的ip地址:~/wg/
拷贝/移动文件
cp hello.csv ./python/ml
:把当前目录的 hello.csv 拷贝到当前目的 python 文件夹里的 ml 文件夹里mv hello.csv ./python
:把当前目录的 hello.csv 剪切到当前目的 python 文件夹里cp -r /usr/wg/ /usr/wgg/
:将/usr/wg 目录中所有文件及其子目录拷贝到/usr/wgg 中
conda 配置
更换 conda 源
conda 下载 pytorch 巨慢是因为国内镜像源不支持 conda,但是最新发现清华源已经支持了,需要额外添加 pytorch 的库,否则找不到
安装
conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=9.2 -c pytorch
但是一定要去掉后面的 -c pytorch。因为命令最后是-c pytorch,所以默认还是从 conda 源下载,新安装的清华等源没有用上
查看 conda 配置
conda config --show
设置搜索时显示通道地址
conda config --set show_channel_urls yes
pip 配置
更换 pip 源
临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip install some-package -i https://mirrors.aliyun.com/pypi/simple/
豆瓣
https://pypi.doubanio.com/simple/
阿里云
https://mirrors.aliyun.com/pypi/simple/
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/
设为默认
升级 pip 到最新的版本后进行配置
pip install pip -U
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
安装 opencv
安装 opencv-contrib-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python
更换镜像的 python 版本
如果拉取的镜像中是 python3.5 版本 但是实际需要 3.6 版本
拉取 tf 镜像
创建容器
使用这个 PPA 源
修改 python 命令默认指向 python3.6:
(1)查看默认 python 指向:
(2)删除原有 python 软连接
(3) 建立 python 到 python3.6 新的软链接
(4) ubuntu 安装 pip:直接安装 python3 版本 pip
(5) 建立 pip 到 pip3 的软连接
可能碰到的问题:
如果执行 apt-get install python3.6-pip 报错则安装新的 pip
成功!!
但这时,安装的 pip 是一个新的 pip,替代了之前镜像中自带的 pip 中已经下好的东西,现在的 pip 是一个全新的环境,需要自己全部添加需要的环境
撒花🎉希望可以帮助到大家不好之处多多包涵
微信公众号 : 后端开发充电宝
个人知识库:语雀知识库
保持谦逊,保持自律,保持进步
版权声明: 本文为 InfoQ 作者【卫先生】的原创文章。
原文链接:【http://xie.infoq.cn/article/3411ffc52adb4968e2885c242】。文章转载请联系作者。
评论