用于Flask应用程序的Docker多阶段构建

时间:2019-07-26 19:47:03

标签: python docker docker-multi-stage-build

我想对具有大量依赖关系的flask应用程序进行Docker化。我的目标是减少最终docker映像的大小。

我尝试了多阶段构建,但这并没有减小最终docker映像的大小。

下面是我的Dockerfile

FROM python:3.6-slim-buster as base

RUN apt-get update && apt-get install --no-install-recommends --no-upgrade -y \
    libglib2.0-0 libxext6 libsm6 libxrender1 libfontconfig1 && rm -rf /var/lib/apt/lists/*


WORKDIR /wheels

COPY requirements.txt /wheels

RUN pip install -U pip \
   && pip wheel -r requirements.txt



FROM python:3.6-slim-buster

COPY --from=base /wheels /wheels


RUN pip install -U pip \
       && pip install -r /wheels/requirements.txt \
                      -f /wheels \
       && rm -rf /wheels \
       && rm -rf /root/.cache/pip/* 

...

最后一个pip install...命令占用了905MB

我应如何将所有要求与最终映像分开,并减小最终docker映像的整体尺寸?

1 个答案:

答案 0 :(得分:0)

在最终this中删除/ wheels不会使图像变小-这些文件仍位于最终图像所基于的上一层中。复制完其中的内容后,图像中的内容就会出现。

我建议将代码安装到构建映像中的virtualenv中(尽管您也可以执行--user install),然后将virtualenv复制到运行时映像中。

RUN

有关原始版本的更多说明,请参见此处:https://pythonspeed.com/articles/multi-stage-docker-python/