29.04.2025

Otimização de imagens do Docker: um guia passo a passo

Imagens Docker são a base da conteinerização. No entanto, imagens não otimizadas podem ser grandes demais, inseguras e lentas para construir. Isso afeta a velocidade de deployment, o consumo de recursos e a segurança da infraestrutura. Neste artigo, vamos explorar as melhores práticas para otimizar imagens Docker — para que seus aplicativos iniciem mais rapidamente, ocupem menos espaço e sejam mais fáceis de manter.

Por que otimizar imagens Docker?

1. Use imagens base mínimas

Quanto menor a imagem base, menor o tamanho final.

Ruim:

FROM ubuntu:22.04

Melhor:

FROM debian:bullseye-slim

Melhor ainda:

FROM alpine:3.19

Alpine tem apenas ~5 MB, mas pode ter problemas de compatibilidade com algumas bibliotecas.

2. Limpe arquivos temporários após instalação

Exemplo:

RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*

Isso reduz o tamanho do layer ao remover caches e arquivos temporários.

3. Use multi-stage builds

A construção em múltiplas etapas permite compilar em uma fase e copiar apenas o necessário para a imagem final.

Exemplo:

# Etapa de build
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o main .

# Imagem final
FROM alpine:3.19
COPY --from=builder /app/main /app/
ENTRYPOINT ["/app/main"]

Resultado: uma imagem leve, enxuta e segura.

4. Use .dockerignore

O arquivo .dockerignore funciona como .gitignore, excluindo arquivos desnecessários do contexto de build.

Exemplo:

.git
node_modules
tests
Dockerfile
README.md

Isso acelera a construção e reduz o tamanho da imagem.

5. Combine comandos RUN

Cada comando RUN cria um novo layer. Prefira encadeá-los com &&.

Ruim:

RUN apt update
RUN apt install -y curl

Melhor:

RUN apt update && apt install -y curl

6. Instale apenas o que for necessário

Evite pacotes "por precaução". Menos software = mais segurança + menor imagem.

7. Minimize o número de layers

Cada RUN, COPY, ADD gera um novo layer. Combine ações quando possível.

8. Analise suas imagens

Verifique o tamanho e estrutura:

docker image inspect <nome_da_imagem>

Ou use a ferramenta Dive:

dive <nome_da_imagem>

9. Use versões fixas

Evite usar latest — isso dificulta o cache e gera builds instáveis:

FROM node:18.17.0

FAQ

🔸 O tamanho da imagem afeta a performance?
Sim, especialmente em pipelines CI/CD ou ao transferir entre servidores. Imagens menores resultam em deploys mais rápidos.

🔸 Devo sempre usar Alpine?
Não necessariamente. Alpine pode ter problemas de compatibilidade com glibc. Teste bem antes de usar em produção.

🔸 Como saber quais arquivos ocupam mais espaço?
Use o dive,docker image inspect ou docker history>.

Conclusão

A otimização de imagens Docker não é apenas um “bônus”, mas uma prática essencial para times que buscam estabilidade, escalabilidade e segurança. Cada megabyte importa: quanto mais leve e limpa a imagem, mais rápido o deploy, menos vulnerabilidades e mais fácil o suporte.

Reveja seus Dockerfiles regularmente, reduza o número de layers, elimine dependências desnecessárias e use .dockerignore para excluir arquivos inúteis do build. Não se esqueça do multi-stage build — uma das formas mais eficazes de criar imagens enxutas e produtivas.

Aplicando essas práticas você alcança:

Lembre-se: uma imagem Docker bem otimizada é o cartão de visitas do seu app em produção. Mantenha-a limpa, rápida e segura — e colha os frutos de uma operação estável.