docker总结
以下是我在使用过程中
- 遇到的坑
- 解决的问题
- 一些总结
其中还有很多不足,大家可以慢慢一起完善
希望可以帮助到大家,大家一起进步一起成长
# 安装
建议 ubuntu16.4/18.4
安装说明自行百度不做介绍
安装docker
https://blog.csdn.net/jinking01/article/details/82490688 (opens new window)
安装nvidia-docker 参考官方
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#installing-docker-ce (opens new window)
# 测试可用
# 检验cuda是否安装正确&能否被pytorch检测到
- import torch
- import torchvision
- print(torch.cuda.is_available())
python -c "import torch;print(torch.cuda.is_available())"
# 测试pytorch能不能调用cuda加速
- a = torch.Tensor(5,3)
- a=a.cuda()
- print(a)
python -c "import torch;print(torch.cuda.is_available());a = torch.Tensor(5,3);a=a.cuda();print(a)"
# 基本操作
# 基础命令
镜像可取docker hub 自行下载 不做介绍
查看当前使用pytorch的版本
import torch
print(torch.__version) #注意是双下划线
查看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
在 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-serverapt update && apt install openssh-server
注意,要在两个地方安装
- 远程服务器
- 容器内
# 3. 建立连接
进入容器
修改SSH连接的密码
默认账户为rootpasswd
容器内部重启ssh服务service ssh restart
在服务器中测试容器与服务器上的映射是否建立docker port <容器名字> 22
若输出,表明只要外界连接到服务器的2222端口,就会转发到容器的22端口0.0.0.0:2222
# 4. 本地测试连接是否建立
ssh root@<你服务器的ip地址> -p 2222
若成功 则直接连接至容器
:::info
第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 (opens new window)
容器内部 curl www.baidu.com (opens new window)
Linux 删除目录
rm -rf xxx 递归删除目录的所有文件
编辑文件的两种方式
gedit
vim
查看线程命令
ps -aux
杀死线程命令
kill pid
SCP
使用ssh的scp服务传输文件
sudo scp /home/outpainting-wg.tar kWang1@172.31.151.24:~/
scp ERN.tar yzKe1@172.31.151.32:~/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 config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ (opens new window)
conda下载pytorch巨慢 是因为国内镜像源不支持conda 但是最新发现清华源已经支持了, 需要额外添加pytorch的库,否则找不到
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/ (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/ (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda/ (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/menpo/ (opens new window)
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ (opens new window)
安装 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 (opens new window) pandas
豆瓣
https://pypi.doubanio.com/simple/ (opens new window)
阿里云
https://mirrors.aliyun.com/pypi/simple/ (opens new window)
清华大学
https://pypi.tuna.tsinghua.edu.cn/simple/ (opens new window)
https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ (opens new window)
临时使用
pip install some-package -i https://mirrors.aliyun.com/pypi/simple/ (opens new window)
设为默认#
升级 pip 到最新的版本后进行配置
pip install pip -U
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ (opens new window)
# 安装opencv
安装opencv-contrib-python
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple (opens new window) opencv-contrib-python
后
若出现
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
则
apt-get update
apt-get install -y libgl1-mesa-dev
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
则
apt-get update
apt-get install libglib2.0-dev
ImportError: libSM.so.6: cannot open shared object file: No such file or dir
apt-get install libsm6
如果你出现了上面的错误,那你很大概率也会遇到下面的问题,
ImportError: libXrender.so.1: cannot open shared object file: No such file or directory
apt-get install libxrender1
ImportError: libXext.so.6: cannot open shared object file: No such file or directory
apt-get install libxext-dev
# 更换镜像的python版本
如果拉取的镜像中是python3.5版本 但是实际需要3.6版本
拉取tf镜像
创建容器
相关连接
https://blog.csdn.net/th_num/article/details/82804392 (opens new window)
https://blog.csdn.net/weixin_43802384/article/details/90040968 (opens new window)
https://blog.csdn.net/weixin_42259631/article/details/82818058 (opens new window)
https://www.jianshu.com/p/2a5cd519e583?tdsourcetag=s_pcqq_aiomsg (opens new window)
https://blog.csdn.net/weixin_30300523/article/details/101772159?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-1-101772159.nonecase&utm_term=%E5%8D%87%E7%BA%A7docker%E4%B8%AD%E7%9A%84python%E7%89%88%E6%9C%AC&spm=1000.2123.3001.4430 (opens new window)
使用这个PPA源
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.6 python3.6-dev -y
修改python命令默认指向python3.6:
1. 查看默认python指向:
sudo ls -l /usr/bin | grep python
2. 删除原有python软连接
sudo rm /usr/bin/python
3. 建立python到python3.6新的软链接
sudo ln -s /usr/bin/python3.6 /usr/bin/python
4. ubuntu 安装pip:直接安装python3版本pip
sudo apt-get install python3-pip ---这里也有个小坑!如果你写的是python3-pip 执行安装后,如果系统自带了python3.5,其实pip这时是装在了python3.5环境下了!!!
sudo apt-get install python3.6-pip ---正确的指定方式,应该把小版本号也加上!
5. 建立pip到pip3的软连接
sudo ln -s /usr/bin/pip3 /usr/bin/pip
如果执行apt-get install python3.6-pip 报错
则安装新的pip
curl https://bootstrap.pypa.io/get-pip.py (opens new window) -o get-pip.py
如果安装到python下就是
python get-pip.py --force-reinstall
如果安装到python3下就是
python3 get-pip.py --force-reinstall
成功
但这时,安装的pip是一个新的pip,替代了之前镜像中自带的pip中已经下好的东西
现在的pip是一个全新的环境,需要自己全部添加需要的环境
撒花🎉
希望可以帮助到大家
不好之处多多包涵