Docker
Produção
Imagens
Segurança
DevOps
Containerização

Docker para Produção: Construindo Imagens Leves e Seguras

Docker para Produção: Construindo Imagens Leves e Seguras

Docker transformou a entrega de software, mas usar containers em produção exige disciplina. Imagens grandes aumentam custos de armazenamento e tempo de deploy, enquanto vulnerabilidades podem expor seu ambiente a ataques. Este guia apresenta boas práticas que garantem imagens leves, seguras e versionáveis.

Boas práticas essenciais

  • Multi-stage builds, compile o código em um estágio e copie apenas os artefatos finais.
  • Imagens base minimalistas, prefira alpine ou distroless para reduzir a superfície de ataque.
  • Nunca incluir credenciais, arquivos .env, chaves ou tokens nunca devem ser copiados para a imagem.
  • Executar como usuário não-root, crie um usuário dedicado e configure o container para usá-lo.
  • Versionamento sem latest, utilize tags semânticas (v1.2.3) para rastreabilidade e rollback.

Exemplo enxuto de Dockerfile multi-stage (Node.js), 9 linhas

FROM node:20-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . RUN npm run build # gera artefatos estáticos FROM gcr.io/distroless/nodejs20 WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules USER nonroot EXPOSE 3000 CMD ["dist/index.js"]

Checklist de segurança de imagem

  • Escanear vulnerabilidades com Trivy, Clair ou Snyk.
  • Verificar camadas desnecessárias (docker history).
  • Definir usuário não-root no Dockerfile.
  • Remover arquivos temporários (npm cache clean --force).
  • Assinar a imagem usando Docker Content Trust para garantir integridade.

Estratégia de versionamento

TagQuando usar
v1.2.3Release estável, compatível com semver.
v1.2.3-rc.1Release candidate para testes.
v1.2.3-sha.<commit>Build automatizada para CI, rastreável.

Integração CI/CD simplificada (GitHub Actions), 7 linhas

name: Build & Push Docker Image on: push: branches: [main] jobs: docker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build image run: docker build -t myapp:$ . - name: Login to Docker Hub uses: docker/login-action@v2 with: username: $ password: $ - name: Push image run: docker push myapp:$

Conclusão

Aplicando essas práticas você obtém imagens menores, mais seguras e facilmente versionáveis, reduzindo custos operacionais e mitigando riscos de vulnerabilidades em produção.


Quais estratégias de Docker você já adotou? Compartilhe nos comentários!

Leia também

Docker para Produção: Construindo Imagens Leves e Seguras | Matheus Breguêz