当前位置: 首页 > news >正文

使用Docker将PyQt深度学习项目打包成镜像

前言

由于项目原因,需要学习将深度学习项目打包成docker镜像,所以本文将使用一个封装了yolo的PyQt项目为例,展示如何将此项目打包成docker镜像。

安装docker

通过官方源安装:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

如果上面的方法失败就采用下面的指令:

sudo apt install -y docker.io

安装好后,将当前用户添加到 docker 组(避免每次使用 sudo)

sudo usermod -aG docker $USER

然后重新登录或刷新组权限

newgrp docker

docker的基本命令

查看docker版本

docker --version

例如我这里是

Docker version 28.4.0, build d8eb465

查看所有的docker镜像,这里只有我先前已经创建好的镜像

docker images

将该路径建立为docker镜像

docker build -t xxx .

运行docker镜像

docker run xxx

查看运行中的镜像

docker ps -a

Dockerfile

Dockerfile文件是指导docker进行打包的文档,主要有以下部分:

FROM:制定运行环境

WORKDIR:制定工作目录

COPY:拷贝指令

RUN:预运行指令

CMD:CMD运行指令

下面给出我的项目的Dockerfile仅供参考:

FROM ubuntu:20.04ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV QT_DEBUG_PLUGINS=0
ENV USE_FLASH_ATTN=0
ENV PYTHONPATH=/app
ENV XDG_RUNTIME_DIR=/tmp/runtime-root
ENV LANG=zh_CN.UTF-8
ENV DISPLAY=:0# 在Ubuntu 20.04中安装Python 3.8和基本环境依赖
RUN apt-get update && apt-get install -y \python3 \python3-pip \python3-pyqt5 \python3-pyqt5.qtwebengine \language-pack-zh* \ttf-wqy-microhei \x11-apps \&& rm -rf /var/lib/apt/lists/*# 升级pip并设置工作目录
RUN python3 -m pip install -U pip setuptools wheel
WORKDIR /app# 复制requirements.txt并安装Python依赖
COPY requirements.txt ./
RUN pip install -r requirements.txt# 复制应用程序代码
COPY . .# 中文编码设置
RUN locale-gen zh_CN.UTF-8 && \update-locale LANG=zh_CN.UTF-8 LANGUAGE=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8# 确保settings.json文件存在并设置权限
RUN mkdir -p /app/data && \if [ ! -f /app/data/settings.json ]; then \echo "{}" > /app/data/settings.json; \fi && \chmod 666 /app/data/settings.json# 创建运行时目录
RUN mkdir -p /tmp/runtime-root && chmod 700 /tmp/runtime-root# 设置入口点
CMD ["python3", "main.py"]

运行本地文件

YOLO_UI/
├── Dockerfile
├── .dockerignore
├── requirements.txt
├── main.py
└── ui/
    ├── main_window.py
    ├── __init__.py
    ├── assets/
    ├── tabs/
    │   ├── __init__.py
    │   ├── dataset_splitter_tab.py
    │   ├── image_quality_yab.py
    │   ├── inference_tab.py
    │   ├── settings_tab.py
    │   ├── testing_tab.py
    │   └── training_tab.py
    └── utils/
        ├── __init__.py
        ├── console.py
        ├── error.py
        ├── file.py
        ├── infer.py
        ├── splash_screen.py
        ├── tester.py
        ├── theme.py
        └── trainer.py

我这里的pyqt的一个项目,直接运行 python main.py文件会报错,根据报错提示,采用下面的指令运行成功。

QT_QPA_PLATFORM=wayland python main.py

可以正常的打开了界面了。

docker换源

如果编译这一步走不通,一般都是镜像源的问题:备用源1,备用源2,备用源3。这里提供了三个,我使用第一个就通过了。如果拉取镜像还是网络问题,请切换其他的网络,或者是手机流量均可。

sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]
}
EOF
sudo tee /etc/docker/daemon.json <<'EOF'
{"registry-mirrors": ["https://docker.rainbond.cc","https://docker.registry.cyou/","https://docker-cf.registry.cyou/","https://dockercf.jsdelivr.fyi/","https://docker.jsdelivr.fyi/","https://dockertest.jsdelivr.fyi/","https://mirror.aliyuncs.com/","https://dockerproxy.com/","https://mirror.baidubce.com/","https://docker.m.daocloud.io/","https://docker.nju.edu.cn/","https://docker.mirrors.sjtug.sjtu.edu.cn/","https://docker.mirrors.ustc.edu.cn/","https://mirror.iscas.ac.cn/","https://docker.rainbond.cc/","https://jq794zz5.mirror.aliyuncs.com"]
}
EOF
sudo tee /etc/docker/daemon.json <<'EOF'
{"registry-mirrors": ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://docker.rainbond.cc","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/"],"insecure-registries": ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": true,"experimental": false
}
EOF

重新加载配置

systemctl daemon-reload

重启docker

systemctl restart docker

查看配置是否生效

docker info

部分信息如下所示:

可以看到我此处的镜像源已经切换成功。

将项目进行打包

接下来打包镜像:

sudo docker build -t yolo-ui-app .

如果不成功,就换网络试试,切换镜像。

我这里打包成功了!!下面有一些权限问题,参考这篇文章:采用docker部署含有qt界面的Python项目教程_docker pyqt

停止x11访问限制,只允许本地连接,每次开机都要使用此命令

xhost +local:root

检查DISPLAY变量

echo $DISPLAY

这里会显示 :0

测试X11是否正常工作

xeyes

获取X11认证信息

xauth list $DISPLAY

中间出现了一个错误,问题在我的requirements.txt文件里面:

# 基础包(使用清华镜像)
-i https://pypi.tuna.tsinghua.edu.cn/simple/
torch>=1.8.0
numpy==1.21.6
# PyQt5==5.15.10
PyYAML==6.0.1
opencv-python>=4.5.0
Pillow>=9.0.0
matplotlib>=3.5.0
seaborn>=0.11.0
ultralytics==8.0.145
onnx>=1.12.0

好像是我的Dockfile里面有了,然后这里好像还与版本有关系,但是注释掉就没问题了。

运行容器

docker run --rm -it \--name yolo-ui-app-container \-e DISPLAY=$DISPLAY \-v /tmp/.X11-unix:/tmp/.X11-unix \-v $HOME/.Xauthority:/root/.Xauthority:ro \--network host \yolo-ui-app

正常显示出来了

总结

目前装的仅是cpu版本,对于gpu版本会发生超时和存储不够的问题,关于这一部分后面再找时间研究一下。

http://www.dtcms.com/a/407179.html

相关文章:

  • 腾讯 CodeBuddy 与国内主流 AI 编程工具深度对比
  • 浏览网站怎么用手机做网站开发用什么语言比较好
  • 宿迁做网站需要多少钱江苏省建设厅八大员考试报名网站
  • 机器人小脑的核心技术有哪些 ?
  • 【智慧城市】2025年中国地质大学(武汉)暑期实训优秀作品(5):智慧矿产
  • 【xsslabs】第12-19关
  • 全网营销公司排名前十网站seo哪里做的好
  • 智慧养老管理系统原型设计:医疗级后台与全场景交互方案
  • 全面的网站建设电脑维修 做网站
  • 利用软件做许多网站违法吗wordpress 链接提交
  • [光学原理与应用-470]:南京科耐激光技术推出用于半导体晶圆检测的20M-120M高重频266nm皮秒深紫外激光器
  • 庆阳网站网站建设国内十大mcn公司
  • Python+appium自动化测试
  • 保定网站建设方案外包做电影网站需要
  • GitPuk入门到实战(1) - 安装教程
  • 移动网站建设口碑好论坛如何做seo
  • 云手机能够解决实体机的哪些困扰?
  • 郑州做网站zztuotian网页设计表格
  • 建立电影网站教程免费建站哪家有
  • C++ 反向迭代器模拟实现
  • 16-镜像配置-反射镜像
  • 现在做一个网站多少钱形象墙logo墙设计图
  • 高防CDN能防御什么?
  • 网站数据表怎么做地推团队去哪里找
  • 网站建设标书建立网站时什么可以使用中文
  • 网站建设的对比分析郑州网站设计见效快
  • 网站建设投票系统设计甘德网站建设
  • iBizAppHUB与OWL框架(Odoo前端)深度比对
  • excel表格通过前端fetch上传至后端flask处理流程示例
  • 前后端部署 + Nginx 配置 + Cloudflare 全攻略(通俗易懂版)