PassFront
  1. PassFront
  2. База знаний
  3. Dockerfile и образы

Что такое multi-stage сборка в Docker и зачем она нужна?

Dockerfile и образы

Multi-stage сборка — это Dockerfile с несколькими блоками FROM: артефакты из промежуточных стадий копируются в финальный образ, а весь инструментарий сборки остаётся за бортом.

Пример

FROM node:20 AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html

Что это даёт

  • В финальном образе нет компиляторов, dev-зависимостей и исходников: размер падает с гигабайта до десятков мегабайт.
  • Меньше поверхность атаки: в проде нечего эксплуатировать.
  • Одна команда docker build вместо внешних скриптов с промежуточными образами.

Нюансы

  • Стадию можно собрать отдельно: docker build --target builder — удобно для тестов в CI.
  • Именованные стадии (AS builder) делают COPY --from читаемым.
  • Для интерпретируемых языков в финал копируют только production-зависимости и код приложения.

Коротко для собеседования

В одном Dockerfile описывают несколько стадий: тяжёлая собирает приложение, а лёгкая финальная получает только готовые артефакты через COPY --from. Итог — образ в разы меньше, без компиляторов и исходников, а промежуточную стадию можно собрать через --target для тестов в CI.

Другие вопросы раздела