减小Docker镜像大小:Python3和psycopg2

4
如果我要为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个回答

5
考虑使用多阶段构建。第一阶段用于构建所有所需的依赖项,第二阶段用于生成最终的Docker镜像。只需将生成的site-packages(如果需要,还有其他工件)从构建阶段复制到第二阶段即可。
因此,您的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接