docker深度学习使用教程(二)
本教程介绍如何通过 Dockerfile 构建深度学习环境,并运行带 GPU 支持的容器。适用于如 YOLO、mmdet3d、BEVFusion 等模型部署。
一、增加docker镜像源和代理
-
打开docker管理工具daemon配置文件,sudo vim /etc/docker/daemon.json(可能会没有)
-
复制以下docker镜像源(可以pull镜像)和代理配置(可以push镜像)
{
“registry-mirrors”: [
“https://do.nark.eu.org”,
“https://dc.j8.work”,
“https://docker.m.daocloud.io”,
“https://dockerproxy.com”,
“https://docker.mirrors.ustc.edu.cn”,
“https://docker.nju.edu.cn”],
“proxies”: {
“http-proxy”: “http://127.0.0.1:7897”,
“https-proxy”: “http://127.0.0.1:7897”
}
}
配置镜像
根据dockerfile配置文件
重启的docker保护
sudo systemctl restart docker
重启docker,如果执行不成功可能docker并未正确安装,重新安装docker(docker深度学习使用教程一)
执行dockerfile
构建镜像
在包含 Dockerfile 的目录下,打开终端执行:
docker build -t bevfusion:v1 .
说明:
- `-t bevfusion:v1`:为镜像命名为 `bevfusion`,版本为 `v1`
- `.` 表示 Dockerfile 在当前目录
构建并运行容器
执行如下命令(根据需求增删配置项:GPU、网络及其映射、是否允许使用图形界面、将文件夹链接到docker,并删除我写的说明项)
docker run -it --gpus all
--network=host \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--volume="$HOME/my_workspace:/workspace" \
--name my_conda_container \
bevfusion:v1
-it 启动交互式终端
--gpus all 允许容器使用所有 GPU(需 NVIDIA Container Toolkit)
--network=host 容器使用主机网络,适用于 ROS/GPU调试等
--env="DISPLAY=$DISPLAY" 传递主机的 X11 显示变量,用于 GUI 显示
--env="QT_X11_NO_MITSHM=1" 避免 Qt 图形界面在某些 X11 共享内存问题
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" 映射 X11 的套接字,容器可以调用主机图形显示系统
--volume="$HOME/my_workspace:/workspace" 挂载主机目录 $HOME/my_workspace 到容器内 /workspace
--name my_conda_container 指定容器名称为 my_conda_container
bevfusion:v1 使用镜像 bevfusion:v1 运行容器
问题总结
- 问题一:nvidia无法支持docker运行–gpus all
解决思路:
(1)添加 NVIDIA GPG 密钥
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
(2)添加 NVIDIA Docker 仓库
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
(3)更新并安装
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
(4)重启docker
sudo systemctl restart docker
-
问题二:docker 运行dockerfile缺少环境,在dockerfile中增加所缺少的命令RUN pip install timm
-
问题三:docker 容器打开后立即退出,docker启动的时候需要一个前台环境,如果运行在后台,容器也会随之结束,使用tail -f 让容器保持一个前台运行(有的容器没有tail会报错,可以在dockerfile文件中增加RUN apt-get update && apt-get install -y coreutils )
-
问题四:镜像无法激活环境
查看init以后的~/.bashrc,发现conda是根据shell的类型执行相应的安装
安装完成conda以后,直接执行相同的操作,启动/bin/bash时默认就会激活base环境
ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh
echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc #
echo "conda activate base" >> ~/.bashrc
export PATH="/opt/conda/bin:$PATH"
echo "conda activate base" >> ~/.bashrc
常用命令
这里为大家准备了一些docker常用命令以作参考
镜像操作
# 查看本地镜像
docker images
# 拉取镜像(注意需配置镜像源)
docker pull ubuntu:20.04
# 删除镜像
docker rmi ubuntu:20.04
# 构建镜像(当前目录有 Dockerfile)
docker build -t my_image:latest .
# 查看远程仓库镜像(需登录)
docker search tensorflow
容器命令
# 运行容器(交互式)
docker run -it ubuntu:20.04
# 指定容器名称 + 自动删除 + 执行 bash
docker run --rm -it --name test_container ubuntu bash
# 后台运行
docker run -d --name web nginx
# 查看运行中的容器
docker ps
# 查看所有容器(包括已停止)
docker ps -a
# 停止容器
docker stop 容器ID或名称
# 启动容器
docker start 容器ID或名称
# 重启容器
docker restart 容器ID或名称
# 删除容器
docker rm 容器ID或名称
docker commit 70b218244cf7 yolov12:v1.0
docker login
sudo docker tag 7d5a0bc61f9e lifeiyu6661/yolov12:v1.0
sudo docker push lifeiyu6661/yolov12:v1.0
docker save -o yolov12.tar yolov12:latest
docker load -i yolov12.tar
4511

被折叠的 条评论
为什么被折叠?



