При использовании многоэтапной сборки docker каждый этап начинается с FROM
и не накапливает файлы с предыдущих этапов (и не переменные среды), вам необходимо вручную скопировать нужные файлы.Например, в следующем Dockerfile встроенный образ будет таким же, как openjdk:8
, и не будет содержать ни ваше приложение, ни python.
FROM python:3.7-alpine
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
FROM openjdk:8
Чтобы скопировать файлы с предыдущего этапа, вам нужно указать, какие файлы и с какого этапа копировать:
FROM python:3.7-alpine AS python
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
FROM openjdk:8
WORKDIR /app
COPY --from=python /app .
Многоступенчатая сборка используется в основном, если вам нужно что-то вроде компиляторатолько для процесса сборки, а не для окончательного изображения.он позволяет вам использовать изображение с зависимостями, которые вам нужны в сборке, а затем оставить их позади и использовать только конечный продукт и зависимости, необходимые для выполнения.
Для вашего Dockerfile, если вам нужны и python, и java multi-стадийная сборка не поможет, вы должны искать базовый образ, содержащий оба, или начинать с одного изображения (скажем, java), а затем вручную устанавливать другое (python).