减少Docker映像大小:Python3和psycopg2

时间:2018-07-13 09:30:10

标签: python-3.x docker alpine

如果我为当前使用的Flask部署构建docker映像:

Dockerfile

FROM python:3.6-alpine
COPY . /app
WORKDIR /app

RUN apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add postgresql-dev

RUN pip install pipenv
RUN pipenv install --system --deploy

EXPOSE 5005

ENV FLASK_APP=app/__init__.py
ENV FLASK_RUN_PORT=5005

CMD flask run --host=0.0.0.0

不幸的是,这导致一个大小约为500MB的容器。原始的Alpine图片约为40MB。 主要的大小增加来自安装psycopg2和gcc(psycopg2所需)。

我真的想减小此图像的尺寸。任何想法都值得赞赏。

1 个答案:

答案 0 :(得分:2)

请考虑使用multi-stage builds。在第一阶段用于构建所有所需的依赖关系,在第二阶段用于生成最终的Docker映像。只需将生成的站点包(以及其他工件,如果需要)从构建阶段复制到第二个。

因此,您的Dockerfile可能如下所示(请注意两个FROM语句):

# Build stage:
FROM python:3.6-alpine as build
COPY . /app
WORKDIR /app

RUN apk add --virtual build-deps gcc python-dev musl-dev && \
    apk add postgresql-dev

RUN pip install pipenv
RUN pipenv install --system --deploy

# "Default" stage:
FROM python:3.6-alpine

# Copy generated site-packages from former stage:
COPY --from=build /usr/local/lib/python3.6/site-packages/ /usr/local/lib/python3.6/site-packages/

COPY . /app
WORKDIR /app

EXPOSE 5005

ENV FLASK_APP=app/__init__.py
ENV FLASK_RUN_PORT=5005

CMD flask run --host=0.0.0.0