Fetching latest headlines…
How to criar Dockerfiles eficientes com multi stage builds
NORTH AMERICA
πŸ‡ΊπŸ‡Έ United Statesβ€’July 7, 2026

How to criar Dockerfiles eficientes com multi stage builds

1 views0 likes0 comments
Originally published byDev.to

Multi stage builds sao uma das melhores features do Docker para manter imagens pequenas e organizadas. Vou mostrar como aplicar isso em um projeto Python real.

Crie um arquivo app.py simples:

# app.py
def main():
    print("Hello from a multi stage build")

if __name__ == "__main__":
    main()

Agora crie o Dockerfile sem multi stage:

FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Essa imagem inclui o pip, o cache do pip e ferramentas de build que nao precisamos em producao. O resultado e uma imagem maior que o necessario.

Com multi stage builds separamos o ambiente de build do ambiente final. Veja o mesmo Dockerfile com dois stages:

FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY . .
CMD ["python", "app.py"]

O primeiro stage instala as dependencias. O segundo stage copia so o que importa. O resultado e uma imagem final muito menor.

Para construir e ver o tamanho:

docker build -t minha-app .
docker images | grep minha-app

Para linguagens compiladas como Go o ganho e ainda maior. Veja um exemplo com uma aplicacao Go:

FROM golang:1.23 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/server

FROM scratch
COPY --from=builder /app/server /server
CMD ["/server"]

A imagem final comeca do zero (scratch). Nao tem shell, sistema operacional, nem ferramentas de build. So o binario compilado.

Uma dica pratica: sempre nomeie seus stages com AS para facilitar a leitura. Use nomes como builder, test, ou dev. Isso ajuda a saber o que cada stage faz sem precisar contar linhas.

That's all for now.
Thanks for reading!

Comments (0)

Sign in to join the discussion

Be the first to comment!