Dockerfile mal escrito gera imagens gigantes e inseguras. Aprenda técnicas que reduzem tamanho em 90% e melhoram performance drasticamente.
Conceitos Principais
Layer Caching
Cada instrução cria layer. Docker cacheia layers inalteradas. Ordene instruções: menos mutáveis primeiro. COPY package.json antes de COPY código.
Multi-Stage Build
Múltiplos FROM no mesmo Dockerfile. Stage de build (com dev deps) e stage final (só runtime). Copia artefatos entre stages. Reduz tamanho drasticamente.
Base Images
Alpine (5MB) vs Ubuntu (80MB). Node:18-alpine ideal. Distroless para segurança máxima. Evite tags latest, fixe versão específica.
.dockerignore
Exclui arquivos do build context. node_modules, .git, tests não vão pra imagem. Build fica mais rápido, imagem menor.
Passo a Passo
Boas Praticas
Recomendacoes
• Use npm ci ao invés de npm install
• Não instale devDependencies em produção
• COPY package.json separado para cache de deps
• Use HEALTHCHECK para monitoramento
• Minimize número de layers (combine RUNs)
• Scan imagens com Trivy ou Snyk
Erros Comuns
Evite estes erros
• COPY . . logo no início (quebra cache)
• Rodar como root (user 0)
• Usar latest tag
• Incluir secrets no Dockerfile
• Não limpar cache de package managers