Multi-stage build — техника в Docker, где в одном Dockerfile несколько стадий (FROM), и финальный образ содержит только результат последней стадии. Типичный пример для Go: первая стадия собирает бинарник в образе с Go SDK (~800MB), вторая копирует только бинарник в минимальный образ (alpine или scratch ~5MB).
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o server ./cmd/server
FROM alpine:3.19
COPY --from=builder /app/server /server
CMD ["/server"]
Итоговый образ в 100 раз меньше, не содержит исходников и инструментов сборки — безопаснее и быстрее деплоится.