Многоступенчатые сборки (multi-stage builds) позволяют значительно уменьшить размер финального образа. Основная идея — использовать один образ для сборки, а в финальный образ копировать только необходимые артефакты.
# Stage 1: Build FROM golang:1.21-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 GOOS=linux go build -o main . # Stage 2: Final FROM alpine:latest RUN apk --no-cache add ca-certificates WORKDIR /root/ COPY --from=builder /app/main . CMD ["./main"]
Результат: уменьшение размера образа с 800+ MB до ~15 MB.