В настоящее время я создаю виртуальную среду на первом этапе. Запуск команды pip install -r requirements.txt
, которая устанавливает исполняемые файлы в /venv/bin dir
.
. На втором этапе я копирую /venv/bin dir
, но при запуске приложения python появляется ошибка, поскольку модуль не найден, т.е. мне нужно запустить pip install -r requirements.txt
снова, чтобы запустить приложение. Приложение работает в python 2.7, и для построения некоторых зависимостей требуется компилятор. Также эти зависимости не работают с компилятором альпийских изображений и работают только с компилятором ubuntu или python: 2.7 официальным образом (который, в свою очередь, использует debian)
Я пропускаю некоторые команды на втором этапе, которые помогут в использование скопированных зависимостей вместо повторной установки.
FROM python:2.7-slim AS build
RUN apt-get update &&apt-get install -y --no-install-recommends build-essential gcc
RUN pip install --upgrade pip
RUN python3 -m venv /venv
COPY ./requirements.txt /project/requirements/
RUN /venv/bin/pip install -r /project/requirements/requirements.txt
COPY . /venv/bin
FROM python:2.7-slim AS release
COPY --from=build /venv /venv
WORKDIR /venv/bin
RUN apt-get update && apt-get install -y --no-install-recommends build-essential gcc
#RUN pip install -r requirements.txt //
RUN cp settings.py.sample settings.py
CMD ["/venv/bin/python3", "-m", "main.py"]
На втором этапе я стараюсь избегать pip install -r requirements.txt
, чтобы уменьшить размер изображения, чего не происходит в настоящее время.