【问题标题】:Reduce Docker image size: Python3 and psycopg2减少 Docker 镜像大小:Python3 和 psycopg2
【发布时间】:2018-12-21 15:36:48
【问题描述】:

如果我为当前使用的烧瓶部署构建 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 需要)。

我真的很想缩小这张图片的大小。任何想法表示赞赏。

【问题讨论】:

    标签: python-3.x docker alpine


    【解决方案1】:

    考虑使用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
    

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多