Docker打包OpenCV Python程序

Docker

    Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

打包过程

  1. pip freeze > requirements.txt
  2. 编写dockerfile,需要注意的是这里安装了一些c++库文件供opencv使用,让笔者在打包时吃了一些苦头
# 将官方 Python 运行时用作父镜像
FROM python:3.9-slim
# 将工作目录设置为 当前目录
WORKDIR .
# 将当前目录内容复制到容器中
ADD . .
RUN apt-get update 
RUN apt install -y g++
RUN apt install -y cmake
RUN apt install -y make
RUN apt install -y wget unzip
RUN apt-get -y install build-essential libgtk2.0-dev libgtk-3-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
# 安装 requirements.txt 中指定的任何所需软件包
RUN pip install -r requirements.txt
# 定义环境变量
#ENV NAME World
# 在容器启动时运行 main.py
CMD ["python", "main.py"]
#CMD ["python","./apps/min.py","worker","-l","info"]     ##faust程序worker启动命令
#指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 5005
  1. docker根据Dockerfile构建镜像
docker build -f Dockerfile -t qrdetect:1.1 .
  1. 根据名称为qrdetect:1.1的镜像运行名称为qr的容器,暴露容器内的端口5005为对外8081的端口
docker run --name qr -p 8081:5005 -d qrdetect:1.1 

docker实用命令

由于经验问题,我们可能会要经常使用一些镜像和容器命令

  • 列出容器id
docker ps -a
  • 列出id为xx容器的日志
+ docker logs id
  • 列出镜像id
docker image ls
  • 删除指定id镜像
docker rmi id
  • 删除指定id容器
docker rm id
  • 停止运行指定id容器
docker stop id
  • 导出指定id镜像
docker save -o qrdetect.tar 483128b19e21
  • 加载指定id镜像
docker load --input qrdetect2.tar
  • 导入指定id容器
docker import qrdetect.tar qr:1.1
  • 导出指定id容器
docker export bf2358939836 > qrdetect.tar

经验教训

    最好不用wsl进行打包,问题比较多,还是直接linux环境打包比较好

参考资料:

https://dennislwm.netlify.app/posts/installing-minikube-on-ubuntu-with-wsl-backend/

https://zhuanlan.zhihu.com/p/272541376

https://answers.microsoft.com/zh-hans/windows/forum/all/win11%E5%A6%82%E4%BD%95%E5%85%B3%E9%97%ADhyper-v/25b2974d-80e5-44e6-9e78-6fbd8e3e519f

https://docs.docker.com/engine/install/ubuntu/

https://zhuanlan.zhihu.com/p/53707590

https://blog.csdn.net/foreverhot1019/article/details/102725793

https://blog.csdn.net/weixin_44796670/article/details/115900538

你可能感兴趣的:(Docker打包OpenCV Python程序)