python - 如果我的 docker 镜像有 2.5GB,我会遇到什么问题以及如何减小大小?

标签 python docker machine-learning

我有一个基于 Python 的机器学习项目,我想对其进行 dockerize。我有几个严重的依赖项,例如 dlib , face_recognition , tensorflow , OpenCV等等

以下是我的 docker 文件

FROM ubuntu:18.04
WORKDIR /app
RUN apt update \
    && apt -y upgrade \
    && apt install -y python3 \
    && apt install -y python3-pip \
    && apt install -y poppler-utils \
    && apt install -y libsm6 libxext6 libxrender-dev

ARG DEBIAN_FRONTEND=noninteractive

RUN apt install -y postgresql

COPY dlib-19.17.0-cp36-cp36m-linux_x86_64.whl /app/dlib-19.17.0-cp36-cp36m-linux_x86_64.whl
COPY requirements.txt /app/requirements.txt

RUN pip3 install dlib-19.17.0-cp36-cp36m-linux_x86_64.whl \
    && pip3 install -r requirements.txt

COPY . /app

CMD gunicorn -t 300 --workers 5 --bind  0.0.0.0:8080 wsgi

构建镜像后,大小为 2.5 GB。这么大的图片可以吗?如果不是,如何在保持依赖关系的同时减小大小。

最佳答案

大小是否是一个问题实际上取决于您是否只想拥有一个容器,或者您想要分发和缩放它。在后一种情况下,大小是一个问题,因为它会减慢进程。

为了减小尺寸,你需要做的是使用多阶段。这里有我自己的样本https://github.com/eez0/docker-samples/blob/master/Dockerfile_python .

底线是区分构建过程和运行过程。例如,当前您安装了所有依赖项,但某些可能仅在构建时使用,因此可以安全地删除它们。

如果由于某种原因您不想进入多阶段,请使用 --no-install-recommends 仅安装必要的内容,并删除所有不必要的构建依赖项和 apt 缓存在最后。另外,尝试使用较小的基础镜像,例如 python:3.7-slim

关于python - 如果我的 docker 镜像有 2.5GB,我会遇到什么问题以及如何减小大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59372140/

相关文章:

python - 我应该每次都创建一个新的 Pool 对象还是重复使用一个?

angular - 从docker ui容器调用到api容器

machine-learning - 从 60D(形状上下文)空间投影到 2D 进行视觉分析

python - Tensorflow 对象检测 API : output boxes for probability less than 50%

php - Docker:如何在多个容器/服务之间共享相同的应用程序代码(例如PHP-FPM和NGINX)

machine-learning - 如何使用另一个估计器编写 sklearn 估计器?

python - 比较数字列表相似性的算法?

python - 当条件为真时,Pandas 将数据帧拆分为多个

python - np.power 做了哪些额外的工作?

java - 如何使用 python 和 Java 运行 Docker?