docker技术
同一个操作系统内跑多套不同版本依赖的业务
docker可以使同一个物理机中进程空间,网络空间,文件系统空间相互隔绝
虚拟机弊端:每个需要安装操作系统,太重量级,资源需要提前分配好
部署程序
- 开发环境
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/
# If you have nvidia-docker 1.0 installed: we need to remove it and all existing GPU containers
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
# Add the package repositories
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# Install nvidia-docker2 and reload the Docker daemon configuration
sudo apt-get install -y nvidia-docker2
sudo pkill -SIGHUP dockerd
# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --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
sudo groupadd docker #添加docker用户组
sudo gpasswd -a $USER docker #将登陆用户加入到docker用户组中
newgrp docker #更新用户组
sudo systemctl restart docker # 重启docker
docker ps #测试docker命令是否可以使用sudo正常使用
从镜像中拉取容器
nvidia-docker run --name paddle_docker -it --network=host -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.4.1-gpu-cuda11.7-cudnn8.4-trt8.4 /bin/bash
注:-v $PWD:/paddle 表示的是主机和容器互联的文件夹,如果保证环境纯洁,需要复制一个里面文件到容器中,而不是主机直接操作
使用
sudo systemctl start docker
sudo docker ps -a
#选择容器
sudo docker start 31a
docker images 查看现在的镜像
新建容器,连接host主机
在这里插入代码片
debug
如果出现docker网卡占用无线网卡的情况,尝试
sudo /etc/docker
vim daemon.json
常用语法
docker ps 查看容器
docker start 容器id
exit 退出容器
docker exec -it [容器id] /bin/bash 进入一个正在运行的容器