docker 安装教程:https://zhuanlan.zhihu.com/p/580156606
docker官网下载地址:https://download.docker.com/linux/ubuntu/dists/bionic/pool/stable/amd64/
nvidia-docker官网下载地址:http://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable
1) docker安装
cd docker_deb
sudo dpkg -i containerd.io_1.6.9-1_amd64.deb
sudo dpkg -i docker-ce-cli_20.10.24_3-0_ubuntu-bionic_amd64.deb
sudo dpkg -i docker-ce_20.10.24_3-0_ubuntu-bionic_amd64.deb
卸载docker:
sudo dpkg -P docker-ce
sudo dpkg -P docker-ce-cli
sudo dpkg -P containerd.io
2) nvidia-docker2安装:
cd nvidia-docker
sudo dpkg -i libnvidia-container1_1.9.0-1_amd64.deb
sudo dpkg -i libnvidia-container-tools_1.9.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit_1.9.0-1_amd64.deb
sudo dpkg -i nvidia-docker2_2.9.1-1_all.deb
sudo dpkg -i nvidia-container-runtime_3.9.0-1_all.deb
3)修改镜像源
cd /etc/docker
sudo gedit daemon.json
#添加该行到daemon.json文件里
{"registry-mirrors": ["https://registry.docker-cn.com"]}
docker加载配置文件,重启docker:
systemctl daemon-reload
systemctl restart docker
#sudo gedit /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"graph":"/media/data/daigang/docker"
}
#graph表示需要将docker安装的位置,默认安装到/var/lib/docker,因此可以指定安装到其他未知。
4)编写Dockerfile,Dockerfile制作ubuntu:20.04镜像
cat Dockerfile
内容为:
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV LANG C.UTF-8
RUN sed -i 's@http://archive.ubuntu.com/ubuntu/@http://mirrors.aliyun.com/ubuntu/@g' /etc/apt/sources.list
#RUN apt-get install ffmpeg libsm6 libxext6 -y
然后执行:
cd /media/sdb/2023/limit_sign_project/docker_softwares/docker_file
sudo docker build -t ubuntu20 .
ubuntu20为你构建的镜像名称,.表示当前目录。通过当前目录的Dockerfile文件来构建docker
构建完成后,可以使用以下命令查看所有本地的Docker镜像:
sudo docker images
5)创建容器test并后台运行test容器的命令
sudo docker run -itd --gpus all --privileged --name test new_ubuntu22:v0
#docker rename test ms
sudo docker run -itd --gpus all --privileged --name mms ubuntu20_cuda116:v0
#容器内部需要安装gcc 和g++
#apt install gcc g++
sudo docker run -it --gpus all --privileged --name mms_v1.0 ubuntu20_cuda116:v0
6)进入容器
sudo docker start ms
sudo docker exec -it ms /bin/bash
7)docker复制命令:
sudo docker cp ./sources.list ms:/etc/apt/sources.list
sudo docker cp ms:/etc/apt/sources.list ./
8) 更换apt清华源
#
cd /media/sdb/2023/limit_sign_project/docker_softwares/docker_file
sudo docker cp ./sources.list mms:/etc/apt/sources.list
然后
apt install apt-transport-https
apt install ca-certificates
apt install update
9)将容器打包成镜像
# sudo docker ps -a
# 查看所有容器id
#sudo docker commit -p -a "dg" -m "create mms img" eda05ad514f8 new_ubuntu22:v0
#-p 在 commit 时,将容器暂停
#eda05ad514f8为容器的id
sudo docker commit -a "dg" -m "create mms mirror image" 342bddda7f91 ubuntu20_mms:v0
# 将容器打包成镜像
docker commit -a "dg" -m "create ms image" af58c6836e3a ubuntu20_mms:v4
docker commit -a "dg" -m "create ms mirror image" af58c6836e3a mms_image:v0
#00bf907f7353为容器的id
#ubuntu20_ms:v3,ubuntu20_ms为你取名的镜像名称,v3为tag的id
# sudo docker ps -a
# 查看所有容器id
sudo docker commit -a "dg" -m "create mms mirror image" 342bddda7f91 ubuntu20_ms:v0
#89928e9d830b为容器的id
#ubuntu20_mms:v0,ubuntu20_mms为你取名的镜像名称,v0为tag的id
docker commit -a "dg" -m "create mms mirror image v2" b51258ced419 ubuntu20_ms:v2
docker ps -a
docker commit -a "dg" -m "create mms mirror image v4" a91e6dd38a45 ubuntu20_ms:v4
docker commit -a "dg" -m "create mms mirror image v4" a91e6dd38a45 ubuntu20_ms:v4
10)将镜像打包为 tar 文件
sudo docker save [OPTIONS] IMAGE [IMAGE...]
sudo docker save -o ubuntu20_mms.tar ubuntu20_ms:v0
ubuntu20_ms.tar为需要压缩的镜像包,ubuntu20_ms:v0为镜像名称和镜像tag的id
#sudo docker images #查看所有的镜像
10)将文件new_ubuntu22.tar复制到目标电脑中
11)从tar文件载入镜像,目标电脑需要安装docker
docker load [OPTIONS]
sudo docker load < ubuntu20_ms.tar
#从tar文件载入镜像,目标电脑需要安装docker
docker run --name yu_mysql -v C:\Users\Administrator\docker\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pwd123456 -d -p 33062:3306 yuy:v1 /entrypoint.sh mysqld
自定义容器名
$ docker run --name=自定义名称 -i -t IMAGE /bin/bash
eg: $ docker run --name=container01 -i -t ubuntu /bin/bash
docker run -it -v /test:/soft centos /bin/bash
docker run -itd -v /test:/soft centos /bin/bash
docker run -itd -v /media/sdb/2023/limit_sign_project/mount:/soft ubuntu20_ms /bin/bash
docker run -itd -v /media/sdb/2023/limit_sign_project/mount:/soft ubuntu20_ms /bin/bash
#-v
sudo docker run -it -v /media/sda/2023/limit_sign_project/mount:/media/sda/2023/limit_sign_project/mount -p 8008:8008 ubuntu20_ms:v1 /bin/bash
#执行镜像的命令:
sudo docker run --gpus all -itd -v /media/sda/2023/limit_sign_project/mount:/media/sda/2023/limit_sign_project/mount -p 8008:8008 ubuntu20_ms:v0 /bin/bash
sudo docker run --gpus all -it -v /media/sda/2023/limit_sign_project/mount:/media/sda/2023/limit_sign_project/mount -p 8008:8008 ubuntu20_ms:v0 /bin/bash /home/algorithm_service_v5/run.sh
sudo docker run --gpus all -it -p 8008:8008 -v /media/sdb/2023/limit_sign_project/mount:/media/sdb/2023/limit_sign_project/mount ubuntu20_ms:v0
#启动容器
sudo docker run --gpus all -it -p 8008:8008 -v /home/yf/project/project/3d/SphereFormer-master:/test 4e8cd721fabf
#车道线启动本机
sudo docker run --gpus all -it -p 8008:8008 -v /home/yf/project/rcs/project/ufld/Ultra-Fast-Lane-Detection-v2-master:/test 632278b72312
#点云分割
sudo docker run --gpus all -it -v /media/sdb/2023/limit_sign_project/mount:/media/sdb/2023/limit_sign_project/mount ubuntu20_ms:v0
车道线检测
A6000: 30.123
docker run -d --shm-size=16g --name ufld --gpus all -it -p 8008:8008 -v /home/yf/projects/ufld/datas:/test/datas 80109b4fcd45
RTX3090: 30.145
V2:
docker run -d --shm-size=16g --name ufld --gpus all -it -p 8008:8008 -v /media/data/yf/projects/ufld/data:/test/datas 80109b4fcd45
v1:
docker run -d --shm-size=16g --gpus all -it --name ufv1 -v /media/data/yf/projects/ufv1/Ultra-Fast-Lane-Detection-master:/test 80109b4fcd45
H800
docker run -d --shm-size=16g --name ufld --gpus all -it -p 8008:8008 -v /disk21/yf/ufld/ufld:/test efd0b1aec155
orin 100.45 tensorrt
docker run -d --shm-size=16g --runtime=nvidia -it --name ufld -v /opt/yf/tensorrt:/test 335c3bdcbdcd
nvidia
docker pull nvcr.io/nvidia/tensorrt:22.04-py3
tensorrt本机
docker run --gpus all -it --name trt -v /home/yf/project/tensorrt/tensorrtx:/test 7ef3481e3ca1
#执行镜像的命令:
第一步(创建docker容器):
sudo docker run --gpus all -it -p 8008:8008 --name mms -v /media/sdb/2023/limit_sign_project/mount:/media/sdb/2023/limit_sign_project/mount ubuntu20_ms:v0
第二步(到运行程序目录):
cd /home/algorithm_service_v5
第三步 (执行程序):
sh run.sh
#/media/sdb/2023/limit_sign_project/mount:/media/sdb/2023/limit_sign_project/mount为主机的目录:docker里面的共享的目录,其中docker里面的共享的目录不需要存在(因为为了使目录共享)
#--name mms为创建的容器id
docker stop mms
docker run --gpus all -it -p 8008:8008 --name mms -v /media/sdb/2023/limit_sign_project/mount:/media/sdb/2023/limit_sign_project/mount ubuntu20_ms:v1 /bin/bash /home/run_ms.sh
让普通用户执行docker相关指令时无需sudo
(1)创建名为docker的组,一般在安装docker的时候自动创建,此步骤可省略:
sudo groupadd docker
(2)将当前用户加入组docker:
sudo gpasswd -a ${USER} docker
${USER}为当前用户
(3)重启docker服务:
sudo systemctl restart docker
(4)重新启动服务器
shutdown -r now
(5)操作完毕,验证一下,现在可以不用带sudo了:
docker ps -a
docker images
让docker容器与主机的时间同步。
解决办法:把宿主机的localtime文件复制到容器中
docker cp /etc/localtime 容器名:/etc/
或者:
在创建 Docker 容器时,加上 “-v /etc/localtime:/etc/localtime:ro” 参数,让容器使用宿主机的时间,容器时间与宿主机时间同步。
如,需要使用超级权限执行python脚本:sudo python run.py,密码:123。则shell指令可写为:
echo 123 | sudo -S python run.py
#/media/sda/2023/limit_sign_project/mount/out01jl:/soft
#/soft/out01jl
挂载目录查看:https://zhuanlan.zhihu.com/p/540827187
会导致镜像越来越大。10G的镜像经过4次commit就变成100G。
我们可以通过:docker system df -v,在【Containers space usage:】中查看容器的大小
虽然显示只有10G,但是commit后会非常大。
所以在此找到2种方法:
方法1:直接打包容器,然后import为镜像img1
1) 先重命名挂载目录或取消挂载目录
# 重命名挂载目录
mv /media/sdb/2023/limit_sign_project/mount /media/sdb/2023/limit_sign_project/mount2
# /media/sdb/2023/limit_sign_project/mount为挂载的目录路径
# 或 取消挂载目录
umount -v /home/ld/mount 通过挂载点卸载
#/home/ld/mount为挂载的目录路径
2)容器打包镜像
第1步查看容器id
docker ps -a
第2步先压缩容器为tar
#docker export [OPTIONS] CONTAINER
docker export -o ms_v5.tar ms_v0.4
其中:ms_v0.4为容器名称,ms_v5.tar为压缩容器的tar
第3步将压缩的tar打包成镜像
docker import mms_v5.tar ms_image_v5:v5
其中: ms_v5.tar为压缩容器的tar,ms_image_v5:v5为镜像
3)将镜像打包为 tar 文件
docker save -o ms_image_v5.tar ms_image_v5:v5
其中ms_image_v5.tar为压缩的镜像包,ms_image_v5:v5为镜像名称和镜像tag的id
4)从镜像的tar文件载入镜像,目标电脑需要安装docker
docker load < ms_image_v9.tar
其中ms_image_v9.tar为已经压缩的镜像包