Уменьшить размер изображения 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