Melhores Práticas do Docker
Um resumo condensado das 25 práticas Docker mais importantes para equipes Node.js - extraído de todas as páginas desta seção.
Busque em todas as páginas da documentação
Um resumo condensado das 25 práticas Docker mais importantes para equipes Node.js - extraído de todas as páginas desta seção.
Builds multi-stage sempre: Compile TypeScript em build; execute node dist/main.js em prod - Builds Multi-Stage.
npm ci --omit=dev no stage de runtime: Apenas grafo de dependências de produção reproduzível.
Nunca npm install no Docker: Derivação de lockfile quebra a paridade de produção.
.dockerignore abrangente: Exclua node_modules, testes, .git, .env - Otimização de Imagem.
node:24-bookworm-slim base padrão: Compatibilidade glibc para módulos nativos.
Avalie Alpine apenas com matriz de CI: musl quebra sharp, prisma, bcrypt - Compromissos Distroless & Alpine.
Fixe digests de imagem base: FROM node:24-bookworm-slim@sha256:... previne reconstruções surpresa.
Execute como não-root: USER node após chown -R node:node /app - Contêineres Não-Root.
Vincule 0.0.0.0 e use PORT env: Necessário para K8s, ECS, Cloud Run.
Um processo por contêiner: Separe imagens de API e worker.
/health para liveness: Sem chamadas de banco de dados; rápido 200 - Probes de Saúde e Prontidão.
/ready para prontidão: Verifique o DB principal com timeout curto.
Probe de inicialização para boots lentos: Migrações e cache aquecidos antes da liveness.
Falhe a prontidão em drain de SIGTERM: Pare novo tráfego antes do desligamento - Graceful Shutdown.
Sem segredos em camadas: Injete via segredos do orquestrador em tempo de execução.
Sem .env em COPY: Use .dockerignore e argumentos de build de CI apenas para metadados não secretos.
Compile módulos nativos dentro do stage de build Linux: Nunca copie node_modules do host.
Escaneie imagens em CI: Trivy, Grype ou escaneamento nativo ECR antes do deploy.
Marque imagens com SHA do git: :main não é uma tag de deploy; use tags SHA imutáveis.
Implante o mesmo artefato testado em CI: Construa uma vez, promova o digest - Melhores Práticas de CI/CD.
NODE_ENV=production em runtime: Habilita caminhos de código de produção em frameworks.
Log para stdout/stderr: Sem logging em arquivos dentro de contêineres.
Defina requisições de recursos a partir de testes de carga: O limite de memória deve exceder o RSS sob carga p99 - HPA & Limites de Recursos.
Documente a paridade local do docker compose: Mesmos nomes de variáveis de ambiente que os manifestos K8s.
Revise o tamanho da imagem trimestralmente: docker history e auditoria de dependências quando o tamanho dobrar.
Build multi-stage com npm ci --omit=dev na stage final. Reduz o tamanho, a superfície de ataque e o vazamento de ferramentas de desenvolvimento em uma única mudança.
Depois que a multi-stage bookworm-slim funcionar de forma confiável. Distroless é uma etapa de endurecimento de segurança, não um requisito inicial.
PRs automatizados semanais do Renovate para atualizações de digest, mais reconstrução imediata em advisories críticos de segurança do Node.
Sim. O Kubernetes executa contêineres; alguém deve construir e escanear a imagem. CI faz a build; desenvolvedores depuram localmente.
DevDependencies apenas no stage de build. Nunca envie typescript ou @types/* para produção, a menos que você tenha um motivo documentado.
Versões da Stack: Esta página foi escrita para Node.js 24.18.0 (LTS Ativo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5, e NestJS 11.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026