给一个python项目写dockerfile

选用的基础镜像
python:3.11
python:3.11-slim
python:3.11-alpine

alpine对PaddlePaddle不兼容

复制文件到 /app 文件夹下面

docker里面每一行命令都是基于前一个命令执行之后的容器文件新开一个容器

使用WORKDIR可以将后面的容器目录cd到该目录后面

opencv系统依赖

# 安装OpenCV依赖的系统库
RUN apt-get update && apt-get install -y \
    libgl1  \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libgomp1 \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libwebp-dev \
    && rm -rf /var/lib/apt/lists/*

关键依赖解释:

  • libgl1 - OpenGL支持(GUI功能)
  • libglib2.0-0 - GLib库
  • libsm6, libxext6, libxrender-dev - X11图形库
  • libgomp1 - OpenMP并行计算
  • libgtk-3-dev - GTK库(GUI界面)
  • libavcodec-dev, libavformat-dev, libswscale-dev - 视频编解码库
  • libjpeg-dev, libpng-dev, libtiff-dev, libwebp-dev - 图像格式支持

最小化安装(如果不需要GUI功能):

RUN apt-get update && apt-get install -y \
    libgl1 \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libgomp1 \
    && rm -rf /var/lib/apt/lists/*

可以先创建虚拟环境,然后用
然后安装一下需要的包,最好使用

pip freeze > requirements.txt

保存下依赖

之后在dockerfile里面可以在copy完之后将依赖下载一下
最后可以使用CMD命令作为启动容器的默认命令,来起一个程序

使用

docker build -t name:tag .

来构建镜像
使用

docker images

来查看镜像
使用

docker run -d -p port:port --name name image:tag

来启动镜像

常用参数:

  • -d:后台运行
  • -p 8000:8000:端口映射(主机端口:容器端口)
  • --name my-container:给容器命名
  • -v /host/path:/container/path:挂载目录
  • -e ENV_VAR=value:设置环境变量

示例:

FROM python:3.11-slim

COPY . /app

WORKDIR /app

# 安装opencv依赖系统库
RUN apt-get update && apt-get install -y \
    libgl1 \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libgomp1 \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libwebp-dev \
    && rm -rf /var/lib/apt/lists/*

RUN pip install -r requirements.txt

EXPOSE 18689

CMD ["python", "ocr_service.py"]
FROM python:3.11-slim

COPY . /app

WORKDIR /app

RUN pip install -r requirements.txt

EXPOSE 7373

CMD ["python", "main.py"]
添加新评论