分类 docker 下的文章

一、docker安装

目前服务器基本上都是centos版本的,以下是centos版本安装方案
共有三种安装方式:
官方文档参考:
https://docs.docker.com/engine/install/centos/
其中在线安装,可以使用国内源,教程参考:
https://www.runoob.com/docker/centos-docker-install.html
安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

确定是否安装成功:

docker --version

二、docker调用GPU安装依赖

要注意:要想使用GPU,带部署的服务器也必须要安装以下四个依赖,不安装无法调用GPU:
需要安装4个依赖程序:

yum install -y nvidia-container-toolkit
yum -y install nvidia-container-runtime
yum -y install libnvidia-container-tools 
yum -y install libnvidia-container1

可以离线下载安装:

使用命令下载(在可联网机器下载)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo yum -y install nvidia-container-toolkit --downloadonly --downloaddir ./ yum -y install nvidia-container-runtime --downloadonly --downloaddir ./ yum -y install libnvidia-container-tools --downloadonly --downloaddir ./ yum -y install libnvidia-container1 --downloadonly --downloaddir ./
(参考:https://juejin.cn/post/7066566268379201544)
安装
sudo rpm -ivh *.rpm

三、docker启动

重启:

systemctl daemon-reload
systemctl restart docker

四、docker导入导出

导出

docker save [OPTIONS] IMAGE [IMAGE...]
-o :输出到的文件。

#将镜像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文档
docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3

导人

docker load --input ./ cuda102_runtime.tar

五、 docker占满根目录解决方案

docker 默认占用根目录位置: /var/lib/docker
解决方法:移动 /var/lib/docker 并设置软连接,最后重启docker

mv /var/lib/docker /data/docker
ln -s /data/docker /var/lib/docker

systemctl daemon-reload
systemctl restart docker

六、 Docker 镜像下载

挑选需要的docker 镜像
Docker镜像链接
https://hub.docker.com
ubuntu带 cuda 的 docker 镜像下载
https://hub.docker.com/r/nvidia/cuda/tags?page=1&name=16.04
微信截图_20231208181708.png

需要注意的重点:

1.在centos上面的程序是可以直接在ubuntu镜像下面执行的
2.如果要下载可以直接调用GPU的镜像需要下载含有cuda和cudnn的镜像
3.线上可以用推理环境的镜像:11.2.2-devel-ubuntu20.04,也可以用开发环境镜像:11.2.2-runtime-ubuntu20.04
只是大小不一样。如下图:
4.具体要下载哪个镜像要根据要部署的服务器驱动版本有关系,例如要部署的机器驱动是cuda 11.2对应的版本版本,下载的镜像最好一直,如果大于11.2版本,则无法正常启动镜像或者无法调用GPU,比11.2小的应该可以,但是没有使用。

5.下载镜像后,通过目录共享启动容器,例如:
docker run -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash 
可以把conda虚拟环境的目前拷贝到共享目录下面:然后通过虚拟环境的绝对python路径测试虚拟环境是否正常运行,也可以先通过
torch.cuda.is_available()来为true和false来判断GPU是否可用

82125.png

七、镜像

查看镜像:

docker images

修改镜像名称:

docker tag  imageid   name:version

八、容器

创建容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTION说明(常用):有些是一个减号,有些是两个减号
–name=“容器新名字” 为容器指定一个名称
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行)
-i:以交互模式运行容器,通常与-t同时使用
-t:为容器重新分配一个伪输入终端,通常与-i同时使用;也即启动交互式容器(前台有伪终端,等待交互)
-P:随机端口映射,大写P
-p:指定端口映射,小写p
例如 -p 8080:80,即容器的80端口映射到宿主机的8080端口


1.不使用显卡创建 container
docker run -it nvidia/cuda:10.2-cudnn8-runtime-ubuntu16.04 /bin/bash
2.使用显卡
docker run -it -d --shm-size="80g" -p 5000:5000 -v /home/centos/:/home/centos --gpus all belleagi/belle:v1.0 /bin/bash 


例如:
docker run -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash 

设置网络:
docker run --network=host -it --shm-size="80g" -p 5012:5012 -v /data/liulei/:/data/liulei --gpus all nvidia/cuda:11.2.2-cudnn8-runtime-ubuntu20.04 /bin/bash

2. 查询容器

命令:docker ps [OPTIONS]
OPTIONS说明
-a列出当前所有正在运行的容器+历史上运行过的
-i:显示最近创建过的容器
-n:显示最近n个创建的容器
-q:静默模式,只显示容器编号

docker ps   #当前正在运行的容器
docker ps -a #显示所有容器,包括当前没有运行的容器
docker ps -a | grep "" 按照关键词查询

3、 进入容器

存在 docker attach、docker exec 两种方式。
docker attach container_id   (**注意:** 如果使用此命令,从容器退出,会导致容器的停止。)
docker exec -it container_id /bin/bash

container_id:详见 docker ps –a 命令输出结果。
docker attach 44fc0f0582d9  

4、 退出容器

exit    # run进去容器,exit退出,容器停止
ctrl+p+q  #run进去容器,ctrl+p+q退出,容器不停止

5、 启动和停止容器

1.启动已经停止的容器
docker start 容器ID或者容器名

2.重启容器
docker restart 容器ID或者容器名

3.停止容器
docker stop 容器ID或者容器名

4.强制停止容器
docker kill 容器ID或者容器名

5.删除已经停止容器
docker rm 容器ID或者容器名
注意:rmi为删除镜像 rm为删除容器

6.强制删除:没有停止的容器
docker rm -f 容器ID或者容器名



九、与宿主机拷贝文件

宿主机 -> docker
docker cp /opt/software/temp/test/test.txt f7b37b56fb98:/home
docker -> 宿主机
docker cp f7b37b56fb98:/home  /opt/software/temp/test/test.txt
f7b37b56fb98:container_id

sudo docker run -d --name wechat --device /dev/snd --ipc="host" \
 -v /tmp/.X11-unix:/tmp/.X11-unix \
 -v $HOME/WeChatFiles:/WeChatFiles \
 -e DISPLAY=unix$DISPLAY \
 -e XMODIFIERS=@im=ibus \
 -e QT_IM_MODULE=ibus \
 -e GTK_IM_MODULE=ibus \
 -e AUDIO_GID=`getent group audio | cut -d: -f3` \
 -e GID=`id -g` \
 -e UID=`id -u` \
bestwu/wechat

source wechat.sh

docker start wechat
docker stop wechat
sudo docker rm -f wechat

http://shiyuefei.top/2020/09/01/CentOS%E5%AE%89%E8%A3%85%E5%BE%AE%E4%BF%A1/
https://www.jianshu.com/p/2a603db77195

https://zhuanlan.zhihu.com/p/379416038
https://zhuanlan.zhihu.com/p/323723229
https://www.jianshu.com/p/2a603db77195