Home > Blog > Desenvolvimento Web
Desenvolvimento Web
JavaScript
Programação

Imagens Distroless no Node.js: containers menores

Atualizado em: 20 de outubro de 2026

Rack de servidores processando fluxos de dados no Node.js

Imagens Distroless no Node.js contêm apenas o runtime e bibliotecas necessárias para executar a aplicação, sem shell, gerenciador de pacotes ou várias ferramentas comuns de uma distribuição Linux. Isso reduz tamanho e superfície de ataque, mas exige um processo de build e diagnóstico bem planejado.

Quando usar

Distroless é adequado para aplicações compiladas e previsíveis, com observabilidade externa e pipeline capaz de produzir todos os artefatos antes do runtime.

Dockerfile

FROM node:22-bookworm-slim AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
RUN npm prune --omit=dev

FROM gcr.io/distroless/nodejs22-debian12:nonroot
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY --from=build /app/package.json ./package.json
CMD ["dist/server.js"]

Verifique o formato de CMD exigido pela imagem escolhida e fixe versão ou digest.

Sem shell

Comandos como sh, bash, curl e apt não estão disponíveis. Isso dificulta ataques que dependem dessas ferramentas, mas também muda a forma de investigar incidentes.

Debug

Mantenha uma variante de debug separada ou use containers efêmeros da plataforma. Não instale ferramentas de diagnóstico permanentemente na imagem de produção.

Certificados e timezone

Confirme se a imagem inclui certificados CA e dados de timezone necessários. Aplicações que dependem de arquivos específicos devem copiá-los explicitamente.

Addons nativos

Dependências nativas precisam ser compiladas para a mesma base ABI do runtime. Teste em CI e evite copiar binários produzidos em ambiente incompatível.

Usuário nonroot

Prefira a variante nonroot. Garanta que a aplicação não precise escrever no diretório do código e use volumes ou diretórios temporários autorizados.

Logs

Escreva logs estruturados em stdout e stderr. Não dependa de arquivos locais ou rotação dentro do container. Consulte Pino no Node.js.

Health checks

Como não existe curl, prefira probes HTTP executadas pela plataforma ou um endpoint de saúde. Não dependa de um comando shell dentro da imagem.

Segredos

Injete segredos em runtime pela plataforma. Nunca copie arquivos .env para a imagem. Veja Secret Management no Node.js.

SBOM e assinatura

Gere SBOM, escaneie a imagem e assine o artefato. Uma imagem menor não é automaticamente segura.

Multi-stage

Distroless depende de uma etapa anterior completa. Consulte Docker Multi-Stage no Node.js.

Erros comuns

  • esperar um shell em produção;
  • copiar dependências de base incompatível;
  • não testar certificados;
  • usar usuário root;
  • não planejar debug;
  • copiar segredos no build;
  • assumir que imagem pequena dispensa scanner.

Conclusão

Imagens Distroless no Node.js reduzem componentes presentes no runtime e incentivam containers imutáveis. Elas funcionam melhor com multi-stage build, observabilidade externa, usuário não root e estratégia de debug separada.

Consulte a documentação oficial do Distroless e as boas práticas de multi-stage do Docker.

10 melhores cursos de programação em 2026

Descubra os melhores cursos de programação. Aprenda a escolher o curso ideal para iniciar ou avançar na carreira de desenvolvedor

POSTS RELACIONADOS

Ver todos

Seta para a direita