Уменьшить размер изображения Docker: Python3 и psycopg2

Если я создаю образ докера для развертываний фляг, я в настоящее время использую:

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

К сожалению, это приводит к контейнеру размером около 500 МБ. Оригинальное изображение Alpine было около 40 МБ. Основное увеличение размера происходит за счет установки psycopg2 и gcc (необходим для psycopg2).

Я действительно хотел бы уменьшить размер этого изображения. Любые идеи приветствуются.

1 ответ

Рассмотрите возможность использования многоступенчатых сборок. Используйте первый этап для построения всех желаемых зависимостей и второй этап для создания окончательного образа 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
Другие вопросы по тегам