docker技术
同一个操作系统内跑多套不同版本依赖的业务
docker可以使同一个物理机中进程空间,网络空间,文件系统空间相互隔绝
虚拟机弊端:每个需要安装操作系统,太重量级,资源需要提前分配好
docker在训练模型方面的好处:
- 配置环境快,conda可能要半天到一天,docker只需要几个小时或着更短
- 大型项目yolo,paddle,mmlab都有相应的docker仓库,可以一键拉去配置环境和代码 https://hub.docker.com/r/ultralytics/yolov5
部署程序
- 开发环境
win+java - 测试环境(?ubuntu)
传代码
装依赖 - 生产环节
docker可以上传运行环境+源码,流水线快速交付
Ubuntu Linux的安装
- 安装docker
首先安装curl
sudo apt install curl
一键安装docker
curl -fsSL https://get.docker.com | bash
- 报错 GPG error
sudo dpkg -i /home/Downloads/cudnn-local-repo-ubuntu2204-8.5.0.xxx.deb
报错建议:
sudo cp /var/cudnn-local-repo-ubuntuxxx.gpg /usr/share/keyrings/
- 安装nvidia-docker
介绍:
https://developer.nvidia.com/zh-cn/blog/nvidia-docker-gpu-server-application-deployment-made-easy/
官方安装步骤:
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
# Setup the package repository and the GPG key:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
# Install the nvidia-container-toolkit package
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
# Test nvidia-smi with the latest official CUDA image
sudo docker run --runtime=nvidia --gpus all --rm nvidia/cuda:11.7.1-base-ubuntu22.04 nvidia-smi
报错
Error response from daemon: manifest for nvidia/cuda:11.0 not found: manifest unknown: manifest unknown
命令中需要到下面网址找到对应的版本
https://gitlab.com/nvidia/container-images/cuda/blob/master/doc/supported-tags.md
- 设置权限
cd /var/lib
sudo chmod -R 777 docker
cd /var/lib/docker
- 从镜像中拉取容器
#yolov5
docker pull ultralytics/yolov5
# paddle
docker pull paddlepaddle/paddle
- 使用下载好的镜像创建容器
- paddle
docker run --name paddle_docker -dit --network=host --gpus all -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.4.1-gpu-cuda11.7-cudnn8.4-trt8.4 /bin/bash
注:-v $PWD:/paddle 表示的是主机和容器互联的文件夹,如果保证环境纯洁,需要复制一个里面文件到容器中,而不是主机直接操作
- yolov5
sudo docker run --dit --network=host -it --gpus all -v $PWD:/yolo ultralytics/yolov5:latest
- 网络配置
# 安装ifconfig
apt install net-tools
# 安装ping
apt-get install inetutils-ping
互通
ifconfig -a
查看本机ip
- 使用
sudo systemctl start docker
sudo docker ps -a
#选择容器
sudo docker start 31a
docker images 查看现在的镜像
debug
如果出现docker网卡占用无线网卡的情况,尝试
sudo /etc/docker
vim daemon.json
常用语法
docker ps 查看容器
docker start 容器id
exit 退出容器
docker exec -it [容器id] /bin/bash 进入一个正在运行的容器
链接VSCode(方便好用)
- 下载vscode,添加扩展
docker
和Remote Explore
- 添加用户组
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
sudo systemctl restart docker # 重启docker
docker ps #测试docker命令是否可以使用sudo正常使用
- 在VScode中右键启动需要的容器
点击docker小蓝鲸
当标为小三角时,表示容器已经启动,再次右键点击attach Visual Studio Code,打开容器
新窗口选择open folder打开文件夹,找到文件位置即可在命令行中调试