常用docker命令:

docker images 查看镜像

docker rmi image-id 删除镜像

docker ps -a 查看所有容器

docker rm container-id 删除容器

docker image prune 释放

yolov5封装学习链接

csdn学习链接:用Docker搭建yolov5开发环境_docker yolov5-CSDN博客

官方给的链接:Docker Image - Ultralytics YOLO Docs

使用docker封装本地yolov5项目总结

安装docker

官方网址下载,需要邮箱注册

配置镜像源

在设置里面的dockers engine中配置镜像

{

"builder": {

"gc": {

"defaultKeepStorage": "20GB",

"enabled": true

}

},

"experimental": false,

"features": {

"buildkit": true

},

"registry-mirrors": [

"https://docker.mirrors.ustc.edu.cn",

"https://registry.docker-cn.com",

"http://hub-mirror.c.163.com",

"https://mirror.ccs.tencentyun.com"

]

}

更换 image保存路径,不然c盘会炸

更换前需要将images中所有进程停止

这里面的yolov5v1就没有停止,显示的是In use

创建Dockerfile,注意,没有拓展名

#基于的基础镜像

FROM nvcr.io/nvidia/pytorch:24.01-py3

#代码添加到code文件夹

ADD . /usr/src/app/uniform/yolotest

# 设置code文件夹是工作目录

WORKDIR /usr/src/app/uniform/yolotest

# 安装支持

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

在Yolov5项目目录的中创建Image(用pycharm的终端、cmd都可以)

由于封装cuda和cudnn总是出问题,最后也没有解决,主要是connect不上,国内镜像都是cpu的torch

然后直接在网上找了一个现成的,里面的python是3.10的

需要先用docker pull一下:docker pull nvcr.io/nvidia/pytorch:24.01-py3

在docker的images中可以看到

然后进行创建

docker build -t yourname .

这里的yourname为自己设定的名字,我这里设定的是yolov5

在docker的bulids和images里面有记录,我这里的images已经删除了

中间一般不会有报错了

Image转为Container

docker run --gpus all -it --name yolov5 -v E:\Users\yolov5:/mnt/ yolov5:last bash

其中:

--gpus all:请求使用所有可用的 GPU 资源。

-it:两个选项的组合:

-i:以交互模式运行容器,保持标准输入流(stdin)打开。

-t:分配一个伪终端,允许用户与容器交互。

-v E:\Users\yolov5:/mnt/:挂载一个卷,将主机上的 E:\Users\yolov5 目录映射到容器内的 /mnt/ 目录。这允许容器访问主机上的文件。mnt可以随意更 换,尽量是没有出现过的地址,不然里面的东西可能会被覆盖

--rm:容器在停止时自动删除。这避免了容器占用的空间。(可以不用)

yolov5:last:指定要运行的 Docker 镜像,yolov5 是镜像的名称,last 是标签。

bash:在容器内运行 bash shell,这样用户可以与容器交互。

如果需要添加或者修改yolov5里面的文件,可以在本地的地址(我这里是 E:\Users\yolov5)进行修改,然后进行cp就可以

在docker里面是可以找到 /mnt/ 目录的, /mnt/ 目录里面的内容就我是主机上的 E:\Users\yolov5 里面的内容

在Docker容器中运行yolov5

我这里的名字为yolov5v1,运行 docker run --gpus all -it --name yolov5v2 -v E:\Users\yolov5:/yolo/ yolov5v1 bash

也可以查看自己的docker :docker ps

出现以下的内容就说明成功了,而且没有报GPU错误

查看文件夹内容:ls

启动:python detect.py

docker commit

环境可能会有一些问题,可以直接在docker里面进行pip安装,(conda是不行的,因为没有将conda封装到yolov5里面),在配置完环境可以运行后,新启一个cmd,将修改好可以运行的images进行commit

docker commit 9f593dbe2e80 yolov5v1

9f593dbe2e80为container的ID,用docker ps可以看到,后面是commit的名字,要和之前的不同

我的是yolov5v1

导出封装的docker到本地

在cmd中,或者pycharm的终端

docker save yolov5v1 -o yolov5v1.tar

过程会比较慢

导出完了会在你的目录下面有

上传服务器

托拉,scp上传方法都可以

然后到目录下sudo docker load -i yolov5v1.tar

就可以了

启动方法和windows一样

但是我这出现了问题

服务器的GPU用不了,目前还在查看问题所在

问题解决

我们尝试了很多方法,进行了排除

1.直接将nvcr.io/nvidia/pytorch:24.01-py3打包放进服务器

显示可以使用cuda,torch-gpu也是可以用的

2.考虑可能nvcr.io/nvidia/pytorch:24.01-py3存在问题

在torch版本显示的时候,出现类似于乱码的问题

因此,去docker官网https://hub.docker.com/r/pytorch/pytorch/tags,重新拉取一个镜像,我拉取的是

记得去查看服务器的cuda版本,这里的版本不能超过服务器显卡的cuda上线

2.1 先将这个直接打包上传服务器(接下来所有操作都在服务器)

上传完了可能没有name,我这边就没有,在REPOSITORY和TAG显示

需要重新命名

docker tag 632278b72312 pytorch:1.13.0-cuda11.6-cudnn8-devel

2.2 将pytorch在docker中运行

运行之后,将本地的yolov5文件放到映射的文件夹,使用cp进行复制到运行的docker中

2.3 配置环境

将requirements.txt文件中torch和torchvision注释,不然可能会重新安装pytorch

2.4 配置完运行train.py出现问题

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

这是opencv出现了问题,解决方法(自测有效)

pip install opencv-python-headless,需要和opencv-python一个版本

下面就可以进行训练了

出现一些其他的问题

在cmd中输入:(docker build -t test .)

ERROR: failed to solve: python:3.8.0: failed to resolve source metadata for docker.io/library/python:3.8.0: failed to authorize: failed to fetch oauth token: Post "https://auth.docker.io/token": dial tcp 199.59.149.236:443: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

解决方案:docker构建问题_error: failed to solve: python:3.8: failed to reso-CSDN博客 先把python3.8.0的docker先pull下来:docker pull python:3.8.0;然后重新进行docker构建,就会跳过大包下载失败的问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐