Docker在centos系统下的一些操作

默认已经安装好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、进入容器

有两种方式

  1. 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
  1. 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

我在容器里运行程序时,报这个错。
参照解决办法

  1. 查看是否有“CXXABI_1.3.8”,没有说明需要安装
strings /usr/lib64/libstdc++.so.6|grep CXXABI 
  1. 进入python的安装路径下的lib文件夹。但是我在这个容器里python路径下没有找到对应的lib文件。然后我就在容器外,系统里的anaconda的lib下找到了libstdc++.so.6.0.26,然后将这个文件复制到容器内。
docker cp /home/anaconda3/lib/libstdc++.so.6.0.26 e784762b4183:/
  1. 随后进入容器,将libstdc++.so.6重命名,
 mv libstdc++.so.6 libstdc++.so.6.bak
  1. 重新构建动态库
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值