这里坑点很多,首先需要搞懂nvidia driver, cuda和docker之间的关系,
nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04
先拉取一个镜像(因为我在使用的过程中会经常用到anaconda,所以我这拉一个带有anaconda3的image,这里的pnet换自己喜欢的名字,它是根据anaconda3镜像生成容器名)
docker pull nvidia/cuda:11.7.1-cudnn8-devel-ubuntu18.04
然后就是从拉下来的这个镜像开始创建容器了
docker run -idt -p 30001:22 --gpus all -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all -v /home/yis22/code/share:/home/share --name=dm-pnet nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04 /bin/bash
-idt
: 是常见的参数表示用交互式,退出后后台运行的样式创建容器
-p 30001:22
表示把容器的22端口映射到宿主机的30001端口上
--gps all
表示可以看见宿主机的所有gpu
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility
utility代表可以做utility的事情,只有加上compute才能够使用cuda计算
-v /home/yis22/code/share:/home/share
表示把宿主机的/home/yis22/code/share
目录映射到容器的/home/share
目录
--name=dm-pnet
其中dm-pnet
表示我起的容器名字.
进入容器
docker exec -it dm-pnet /bin/bash
输入以下命令验证是否可以使用gpu
nvidia-smi
nvcc -V
# 以上只是可以看nvidia-smi而已,不一定可以计算,
# 安装好pytorch后,先使用`python`进入解释器,
# 再使用以下命令,如果返回true则是可以调用了.
import torch
torch.cuda.is_available()
先下载联网下载工具wget
apt-get update
apt-get install wget
下载anaconda3
# 进入home目录
cd /home
# 下载anaconda文件, 只是用wget被拒绝了,所以使用用户代理
wget --user-agent="User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12" -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2022.10-Linux-x86_64.sh
# 安装anaconda
bash Anaconda3-2022.10-Linux-x86_64.sh
宿主机 -> 容器
# docker cp 宿主机文件/路径 容器名:容器内路径
docker cp /home/yis22/softwares/anconda3/envs/pnet_pytorch dm-pnet:/home/anaconda3/envs/pnet_pytorch
容器 -> 宿主机
# docker cp 容器名:文件/路径 宿主机路径
docker cp wordpress-lee:/root/example.sh /root
docker commit -a "yisnsiy" -m "code and environment for dm-pnet" dm-pnet yisnsiy/img-dm-pnet:v0.1
-a "yisnsiy"
表示作者信息
-m "code and environment for dm-pnet"
表示注释信息
dm-pnet
用来生成镜像的容器名
yisnsiy/img-dm-pnet:v0.1
:之前时镜像名,用作者/名字
的形式来代表,:之后的v0.1表示标签,一般表示版本号
# 查看所有镜像
docker images
# 删除镜像
docker rmi yisnsiy/dm-pnet:v0.1
yisnsiy/dm-pnet:v0.1
表示镜像名的全称
# 查看所有容器
docker ps -a
# 产看正在运行的容器
docker ps
# 停止容器的运行, dm-pnet是正在运行的容器名
docker stop dm-pnet
# 删除容器
docker rm dm-pnet
# 压缩镜像
docker save yisnsiy/dm-pnet:lastest > /home/yis22/code/dm-pnet:lastest.tar
# 加载镜像
docker load < /home/yis22/code/dm-pnet:lastest.tar
yisnsiy/dm-pnet:lastest
是镜像名
/home/yis22/dm-pnet:lastest.tar
是路径加文件名