Containerização simplificou radicalmente o processo de entrega, escalonamento e manutenção de aplicações, tornando-se o padrão de fato nas práticas de DevOps. No entanto, junto com essa conveniência, surgiram novos desafios. Um deles são as imagens Docker ineficientes. Containers mal construídos geralmente se tornam excessivamente “pesados”, resultando em processos de CI/CD mais lentos, uso excessivo de disco e memória — e, em alguns casos, vulnerabilidades críticas. Otimizar imagens Docker é uma etapa essencial para ambientes de produção. Abaixo, você confere recomendações práticas que ajudarão a criar containers leves, rápidos e seguros — sem dor de cabeça.
1. Use builds multi-stage (Multi-stage build)
Uma das ferramentas mais poderosas para otimização. Ela permite separar o processo de build da imagem final, eliminando arquivos desnecessários da versão de produção.
Exemplo com Go:
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o app
# Imagem mínima para produção
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]
Vantagens:
- A imagem final contém apenas o binário e o necessário para executar.
- Sem compiladores, bibliotecas extras ou arquivos temporários.
2. Escolha imagens base minimalistas
Quanto menor a imagem base, mais leve e segura será a imagem final.
Recomendações:
- Use alpine em vez de ubuntu ou debian>, se seu app não depender de glibc.
- Experimente as imagens Distroless do Google — elas contêm apenas o necessário para executar o app, sem shell ou pacotes extras.
Exemplo:
COPY app /
CMD ["/app"]
3. Organize as instruções do Dockerfile para aproveitar o cache
O Docker utiliza cache em camadas. Se seu código muda com frequência, você pode economizar tempo de build com a ordem certa dos comandos.
Boa estrutura:
RUN go mod download
COPY . .
RUN go build -o app
Assim, o download das dependências será reutilizado enquanto go.mod não mudar.
4. Remova dependências temporárias e lixo
Muitos pacotes só são necessários na fase de build. Remova-os para não carregá-los na imagem final.
Exemplo:
apt-get install -y build-essential && \
make build && \
apt-get purge -y build-essential && \
apt-get autoremove -y && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
Isso pode reduzir dezenas de megabytes desnecessários.
5. Use compressão automática com docker-slim
Exemplo:
O resultado é uma imagem muito mais leve, sem perda de funcionalidade.
Recomendações e antipadrões
- Mantenha as imagens compactas — idealmente abaixo de 100 MB.
- Não adicione pacotes “por precaução” — cada MB conta na performance de deploy.
- Verifique a segurança das imagens com o trivy:
- Nunca hardcode segredos nas imagens — use variáveis de ambiente e gerenciadores de segredos.
Dicas gerais
- Use .dockerignore para evitar copiar arquivos desnecessários (.git, node_modules, logs etc.).
- Minimize o número de comandos RUN combinando-os, reduzindo o número de camadas.
- Automatize build e validação de imagens via CI/CD (GitHub Actions, GitLab CI, etc.).
Ao seguir essas práticas, você não só acelerará o processo de build e entrega de containers, como também reduzirá significativamente o tamanho das imagens — essencial para ambientes em nuvem e clusters. Imagens menores significam downloads mais rápidos, menor consumo de banda e uso mais eficiente dos recursos do host. Além disso, evitar dependências supérfluas e usar imagens base mínimas reduz a superfície de ataque e facilita auditorias de segurança.
Docker e Serverspace
Deseja simplificar sua configuração de CI/CD e ter sempre uma infraestrutura confiável na ponta dos dedos? Com o Serverspace, você pode implantar máquinas virtuais em apenas alguns minutos, automatizar o fornecimento de aplicativos usando uma API avançada e dimensionar sua infraestrutura sem esforço para atender à crescente demanda. Não importa se você está criando do zero ou migrando um projeto existente, o Serverspace oferece ferramentas flexíveis e suporte para tornar a transição tranquila e segura. Além disso, graças a um rico Cloud Marketplace, você pode iniciar ambientes pré-configurados - incluindo Docker, Kubernetes, GitLab e outras ferramentas populares de DevOps - com um único clique. É uma solução ideal para desenvolvedores e equipes que desejam se concentrar na entrega, não na infraestrutura. Experimente o Serverspace e turbine seus fluxos de trabalho de CI/CD e DevOps hoje mesmo!