Многоэтапная сборка в Docker использует несколько инструкций FROM в одном Dockerfile для создания промежуточных этапов. Каждый этап работает независимо, позволяя тебе выборочно копировать артефакты между этапами и значительно уменьшить размер финального образа.
Каждая инструкция FROM начинает новый этап с собственным базовым образом и контекстом сборки. Ты можешь присвоить имя каждому этапу с помощью ключевого слова as, что упрощает обращение к конкретным этапам в дальнейшем.
FROM node:18 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm install --production
EXPOSE 3000
CMD ["node", "dist/index.js"]
Финальный образ содержит только необходимые runtime-файлы и продакшен-зависимости, что значительно уменьшает его размер по сравнению с вариантом, когда в образ включаются инструменты сборки и dev-пакеты.
В многоэтапной Docker сборке каждая инструкция FROM создает новый независимый этап со своим базовым образом и контекстом сборки, и по умолчанию только финальный этап включается в результирующий образ.
Новый — ещё не проверен сообществом
Вы