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

Что такое multi-stage build и зачем он нужен?

Dockerfile и образы

Multi-stage build — сборка образа в несколько этапов в одном Dockerfile, где в итоговый образ попадает только нужный результат.

Проблема

Для сборки фронтенда нужны Node.js, devDependencies и исходники, а для работы достаточно статических файлов и веб-сервера. Всё вместе даёт образ в сотни мегабайт.

Решение

# Этап 1: сборка
FROM node:22-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Этап 2: итоговый образ
FROM nginx:1.27-alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80

Преимущества

  • Маленький итоговый образ: нет компиляторов, исходников и кеша.
  • Меньше поверхность атаки.
  • Один Dockerfile и отдельная цель сборки: docker build --target build ..

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

Сборка и запуск разделяются: тяжёлые инструменты остаются на первом этапе, в итоговый образ копируется только результат через COPY --from.

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