我有一个基于 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/