🟡 Средний · 2 очк. Docker
Зачем нужен multi-stage build в Dockerfile?
A Для параллельной сборки
B Для уменьшения размера финального образа
C Для кеширования слоёв
D Для поддержки нескольких ОС
Объяснение вопроса

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

Проблема без multi-stage

FROM golang:1.21
WORKDIR /app
COPY . .
RUN go build -o myapp .
CMD ["./myapp"]
# Итог: образ ~1 ГБ (вся Go-тулчейн и исходники)

С multi-stage

FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o myapp .

FROM alpine:3.19
RUN apk --no-cache add ca-certificates
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
# Итог: образ ~15 МБ

Этап builder отбрасывается; в финальный образ копируется только бинарник. Меньший образ - быстрее деплой и меньше поверхность атак.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.