简单记录一下安装GPU支持的Docker流程
一、安装Docker
卸载旧版本:
$ sudo apt-get remove docker docker-engine docker-ce docker.io
安装新版本:
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
# 获取所有available的docker版本
$ apt-cache madison docker-ce
# 如获取的结果为docker-ce | 5:19.03.4~3-0~ubuntu-bionic | https://download.docker.com/linux/ubuntu bionic/stable amd64 Package,则 VERSION=5:19.03.4~3-0~ubuntu-bionic
# 不指定版本,默认最新版,但实测有可能下载的不是最新版
$ sudo apt-get install -y docker-ce
# 指定版本
$ sudo apt-get install docker-ce=<VERSION>
检查是否成功:
# 输入这行命令,如果不报错而是弹出一堆提示就说明OK
$ docker
二、安装Nvidia-docker
按照这个链接中的操作进行安装和测试即可
https://github.com/NVIDIA/nvidia-docker
三、拉取镜像
Docker的CUDA和CUDNN环境要和主机一样!
Docker的CUDA和CUDNN环境要和主机一样!
Docker的CUDA和CUDNN环境要和主机一样!
首先要在Hub上找你需要的镜像(注:要找旧版本的镜像,需要点进最新版本的镜像然后找之前的版本)
拉取镜像的命令在网页右侧,可以直接复制。例:
$ sudo docker pull pytorch/pytorch:0.4.1-cuda9-cudnn7-devel
拉取完毕后查看镜像列表确认拉取成功
$ sudo docker image ls
四、运行镜像并指定GPU
根据拉取的镜像ID,可以运行该镜像了,此时需要指定GPU才可以
# 3fe是镜像ID的前三位,实际操作时改成自己对应镜像ID的前三位就可以了
$ sudo docker run --gpus all -it 3fe /bin/bash
在进入workspace后,运行nvidia-smi进行测试,不报错就是成功!恭喜你可以在Docker中使用GPU了!
【注意】:
- 直接在docker中执行
pip install tifffile
不行,会显示连接不上网络 - 查了原因是因为docker与宿主机的网络是隔离的,无法连接网络
- 于是查到了使用离线安装的方式安装python依赖包
- 首先通过如下命令下载好:
pip download tifffile -d download_dir
接着将whl文件copy到docker容器内进行安装 pip install xxx.whl
五、附(一些Docker的常用命令)
进入容器后退出
# 注:经过实际测试,exit并不能完全彻底的退出容器,在删除镜像时会显示之前的容器未关闭
$ exit
删除镜像
$ sudo docker image rm fa5b
# 如果显示被占用:
Error response from daemon: conflict: unable to delete fa5b91571a44 (must be forced) - image is being used by stopped container 0dcfd466295d
# 此时需要删除容器
$ sudo docker rm 0dc
# 之后就可以删除镜像,如果依旧被占用重复进行上述操作即可
拷贝文件到容器中
# 从电脑传容器命令就是 docker cp 要传输的文件 容器ID:/容器路径 (一般此时需要另开一个终端)
$ sudo docker cp test_env.py 942d67acd418:/workspace
# 将容器30026605dcfe的/home/cloudera/RS-MapReduce目录拷贝到主机的/tmp目录中
$ docker cp 30026605dcfe:/home/cloudera/RS-MapReduce /tmp/
容器更新后,将最新版本的容器保存为镜像
# -a 作者, -m 说明, 后面跟容器ID + 新镜像命名
$ docker commit -a "author" -m "introduction" abcdefg12345 lung:v1
将本地镜像保存为本地镜像文件及其读取方式
# 采用docker的save和load操作
$ docker save -o lung.tar lung:v1
$ docker load -i lung.tar
修改镜像名称,上传到hub的镜像需要保证镜像前缀名和用户名一致,此时需要修改镜像名称
# 使用docker tag的操作,后面跟上镜像id和需要修改的名字+版本
$ docker tag imageid name:tag
docker用户登录的命令如下
# 注意,docker的密码至少9位!!因此我自己是用PB学号作为密码的!!提醒自己不要忘记!!
$ docker login
在docker容器内安装python包/模块:
$ pip install xxxxx (-i 镜像源)
注:最近在docker容器内安装cv2的时候出现了大问题,一直显示cannot open shared object file,调研了许久,终于找到了解决方案(非常感谢大佬),现把链接贴在这里防止忘记:
https://blog.csdn.net/qq_35516745/article/details/103822597
其他的一些操作学习后不定期更新。