Node.js em Docker pode ser lento e pesado. Técnicas específicas reduzem imagem de 1GB para 100MB e aceleram builds em 5x.
Conceitos Principais
Layer Caching Node
COPY package*.json antes de COPY código. npm install cacheia se package.json não muda. Economiza minutos por build.
node_modules em Docker
NUNCA copie node_modules local. Use npm ci (lockfile strict). Multi-stage: build deps separado de runtime deps.
Alpine para Node
node:18-alpine vs node:18 = 170MB vs 1GB. Alpine suficiente para 95% dos casos. Use debian apenas se nativa deps.
npm ci vs npm install
npm ci: deleta node_modules, instala do lockfile, mais rápido. npm install: resolve deps, atualiza lockfile. CI sempre npm ci.
Passo a Passo
Boas Praticas
Recomendacoes
• npm ci ao invés de npm install sempre
• package-lock.json commitado no git
• Multi-stage para apps TypeScript
• Dumb-init ou tini para PID 1 correto
• NODE_ENV=production para otimizações
• Healthcheck endpoint /health
Erros Comuns
Evite estes erros
• COPY node_modules do host
• npm install sem lockfile
• Não usar .dockerignore
• COPY . . antes de package.json
• Rodar como root (user node existe)