默认已经安装好docker.
1、启动docker
[root@ai-0-220 wangshengyu]# systemctl start docker
[root@ai-0-220 wangshengyu]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since 一 2021-12-13 21:39:08 CST; 12h ago
Docs: https://docs.docker.com
Main PID: 82743 (dockerd)
Tasks: 44
Memory: 46.0M
CGroup: /system.slice/docker.service
└─82743 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/data/docker
2、拉取镜像
我在这个网址找的镜像hub.docker.com
拉取镜像 nvidia/cuda:10.1-cudnn8-devel-centos7
[root@ai-0-220 wangshengyu]# docker pull nvidia/cuda:10.1-cudnn8-devel-centos7
10.1-cudnn8-devel-centos7: Pulling from nvidia/cuda
2d473b07cdd5: Pull complete
fe1553a884e2: Pull complete
c261b5a3ed6f: Pull complete
1c87ea4a7986: Pull complete
8a3a05ab37b3: Pull complete
6802f742ee15: Pull complete
4d1db593e3f5: Pull complete
994903dac244: Pull complete
850eca0cfbbd: Pull complete
e61072ff12b9: Pull complete
bc4e3c1e7f86: Pull complete
6e381b33ca72: Pull complete
935091d46701: Pull complete
f01817738bde: Pull complete
Digest: sha256:3226dcdd28a46854c8ee44a0f6a0ee5520e7d116becc7c0839f312a575a052e8
Status: Downloaded newer image for nvidia/cuda:10.1-cudnn8-devel-centos7
3、查看所有镜像
可以看到刚刚拉取的镜像10.1-cudnn8-devel-centos7
[root@ai-0-220 wangshengyu]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 8a8a506ccfdc 2 months ago 448MB
nvidia/cuda 10.1-cudnn8-devel-centos7 50f41eaa8fe9 4 months ago 5.39GB
nvidia/cuda 9.0-base 0bedd0dfd4cb 5 months ago 152MB
4、使用镜像创建容器
[root@ai-0-220 wangshengyu]# docker run -dit 50f41eaa8fe9
e784762b4183da66067d67b21cf7b4024d5a0e142a691bce2d83e7b36292e512
5、查看容器
[root@ai-0-220 home]# docker ps -a # 显示所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e784762b4183 50f41eaa8fe9 "/bin/bash" 29 minutes ago Exited (127) 3 minutes ago sleepy_goldberg
3c66378a794b 0bedd0dfd4cb "/bin/bash" 18 hours ago Exited (127) 18 hours ago cuda9
4e92750dbd47 mysql:5.7 "docker-entrypoint.s…" 2 months ago Exited (0) 13 hours ago mysql
[root@ai-0-220 wangshengyu]# docker ps # 只显示运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e784762b4183 50f41eaa8fe9 "/bin/bash" 24 seconds ago Up 22 seconds sleepy_goldberg
6、启动已停止运行的容器
docker start <容器 ID> 进行启动
docker start e784762b4183
# 重启容器
# docker restart <容器 ID>
7、停止容器
docker stop <容器 ID>
docker stop e784762b4183
8、进入容器
有两种方式
- docker attach,使用 attach 命令,如果从这个容器退出,会导致容器的停止。
[root@ai-0-220 home]# docker attach e784762b4183
[root@e784762b4183 /]# exit
exit
[root@ai-0-220 home]# docker ps # 查看运行的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- docker exec, 推荐使用 exec 命令,因为此退出容器终端,不会导致容器的停止
[root@ai-0-220 home]# docker exec -it e784762b4183 /bin/bash
[root@e784762b4183 /]# exit
exit
[root@ai-0-220 home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e784762b4183 50f41eaa8fe9 "/bin/bash" 6 hours ago Up 42 minutes sleepy_goldberg
9、磁盘挂载启动容器
前面一个/home/ocr 是本地系统里的磁盘地址;后面一个/home/ocr是在镜像的/home目录里创建一个ocr文件夹,在创建的这个目录下可以方位本地系统/home/ocr的磁盘。
docker run -itd -v /home/ocr:/home/ocr -it 49a7a54700c9 /bin/bash
# 查看容器挂载信息
sudo docker inspect 359b453b9503 | grep Mounts -A 50
10、在容器里安装anaconda
我的电脑里已经有了一个安装文件,在/home/Anaconda3-2021.05-Linux-x86_64.sh,但是我现在进入了容器里面,无法访问到系统里的这个安装文件(可能有别的方法,但是我不会),此时我先退出容器(因为使用exec进入容器,所以exit时不会导致容器停止),使用docker cp 复制文件到容器内。
[root@ai-0-220 home]# docker cp /home/Anaconda3-2021.05-Linux-x86_64.sh e784762b4183:/
[root@ai-0-220 home]# docker exec -it e784762b4183 /bin/bash
[root@e784762b4183 /]# ls
Anaconda3-2021.05-Linux-x86_64.sh NGC-DL-CONTAINER-LICENSE anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@e784762b4183 /]# bash Anaconda3-2021.05-Linux-x86_64.sh
安装到最后问是否需要进行conda的初始化。若选择yes,是在/root/.bashrc目录中自动添加环境变量,会使得开机自动启动base环境。安装完成后,启动conda命令报错。
[root@e784762b4183 /]# conda
bash: conda: command not found
此时手动添加环境变量到 /etc/profile 文件内。
[root@e784762b4183 /]# vi /etc/profile
在文件最后加入如下语句(路径需要根据自己的安装位置更改),保存并退出。
PATH=$PATH:/root/anaconda3/bin
export PATH
最后使用如下命令刷新环境变量即可
[root@e784762b4183 /]# source /etc/profile
[root@e784762b4183 /]# echo $PATH
可以正常使用conda命令,但是当我断网后,第二天再进入容器发现这个命令又用不了了。查看/etc/profile文件,之前配置的没有问题,查阅资料,发现是因为~/.bashrc文件没有配置好
[root@f290e5e29013 /]# vi ~/.bashrc
# 在最后一行加入 export PATH=$PATH:【你的安装目录】
# export PATH=$PATH:/root/anaconda3/bin
# 保存并运行下面代码
[root@f290e5e29013 /]# source ~/.bashrc
问题解决。
11 ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found
我在容器里运行程序时,报这个错。
参照解决办法
- 查看是否有“CXXABI_1.3.8”,没有说明需要安装
strings /usr/lib64/libstdc++.so.6|grep CXXABI
- 进入python的安装路径下的lib文件夹。但是我在这个容器里python路径下没有找到对应的lib文件。然后我就在容器外,系统里的anaconda的lib下找到了libstdc++.so.6.0.26,然后将这个文件复制到容器内。
docker cp /home/anaconda3/lib/libstdc++.so.6.0.26 e784762b4183:/
- 随后进入容器,将libstdc++.so.6重命名,
mv libstdc++.so.6 libstdc++.so.6.bak
- 重新构建动态库
ln -s libstdc++.so.6.0.26 libstdc++.so.6libstdc++.so.6
问题解决
大问题:无法使用宿主机显卡、驱动!!!!
在容器内使用nvcc -V 可以看到已经装好的cuda,但是nvidia-smi无法使用,即没有显卡驱动。
根据网上的资料,从docker 19版本之后,不需要单独去下nvidia-docker这个独立的docker应用程序,也就是说gpu docker所需要的Runtime被集成进docker中,使用的时候用–gpus参数来控制。但是我的版本是18,所以先升级docker…升级完成后参照博客docker 使用GPU总结解决问题。
# 创建容器
# --shm-size 指定容器共享内存
# -v 磁盘挂载
# --gpus all 使用所有GPU
sudo docker run --shm-size=8g --gpus all -idt -v /data/RND/ouyanghaifei/data4retrieving-main/-:/data/oyhf -it ed145ecd6895 /bin/bash
# --gpus 2 使用两个GPU
# --gpus '"device=1,2"'指定GPU运行
# --gpus '"device=UUID-ABCDEF,1"'指定GPU运行
# 进入容器检查
df -h|grep shm