Что такое 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.