Sobes.tech
Back to questions
Junior — Middle
54

Почему иногда в Dockerfile используют несколько команд FROM в одном файле?

Answer from AI

sobes.tech AI

В Dockerfile используют несколько команд FROM для создания многоступенчатой сборки (multi-stage build). Это позволяет разделить процесс сборки на несколько этапов, каждый из которых использует свой базовый образ.

Основные причины:

  • Оптимизация размера итогового образа: на первых этапах собирается и компилируется приложение с нужными инструментами, а на финальном этапе копируются только необходимые артефакты в минимальный образ.
  • Разделение окружений: можно использовать разные образы для сборки и для запуска, например, образ с Python и инструментами для сборки, а затем легковесный образ только с интерпретатором.

Пример:

FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
COPY . .
RUN python setup.py install

FROM python:3.9-alpine
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
CMD ["myapp"]

Таким образом, итоговый образ содержит только необходимое для запуска, без инструментов сборки.