Entendendo Docker Multi-Stage Builds

Multi-stage builds são a técnica mais eficaz para reduzir o tamanho de imagens Docker. A ideia é simples: compilar em um container com todas as dependências e copiar apenas o binário final para uma imagem mínima.

O Problema

Um Dockerfile típico para Go:

# ❌ Imagem final: ~950MB
FROM golang:1.22
WORKDIR /app
COPY . .
RUN go build -o app .
CMD ["./app"]

A Solução

# ✅ Estágio 1: Build
FROM golang:1.22 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o app .

# ✅ Estágio 2: Runtime (~10MB)
FROM alpine:3.19
RUN apk add --no-cache ca-certificates
COPY --from=builder /app/app /usr/local/bin/app
USER 1000:1000
CMD ["app"]

Resultado

AbordagemTamanho
golang:1.22 direto~950 MB
Multi-stage + alpine~10 MB
Multi-stage + scratch~6 MB

95% de redução. Simples, eficaz e seguro.