Mejores Prácticas de Docker
Un resumen condensado de las 25 prácticas de Docker más importantes para equipos de Node.js, extraídas de cada página de esta sección.
Busca en todas las páginas de la documentación
Un resumen condensado de las 25 prácticas de Docker más importantes para equipos de Node.js, extraídas de cada página de esta sección.
Compilaciones multi-etapa siempre: Compila TypeScript en build; ejecuta node dist/main.js en prod - Compilaciones Multi-Etapa.
npm ci --omit=dev en la etapa de ejecución: Solo el grafo de dependencias de producción reproducible.
Nunca npm install en Docker: La deriva del lockfile rompe la paridad de producción.
.dockerignore completo: Excluye node_modules, pruebas, .git, .env - Reducción de Tamaño de Imagen.
Base predeterminada node:24-bookworm-slim: Compatibilidad con glibc para módulos nativos.
Evalúa Alpine solo con matriz CI: musl rompe sharp, prisma, bcrypt - Compromisos de Distroless y Alpine.
Fija los resúmenes de imágenes base: FROM node:24-bookworm-slim@sha256:... evita reconstrucciones inesperadas.
Ejecutar como no root: USER node después de chown -R node:node /app - Contenedores No Root.
Enlaza 0.0.0.0 y usa la variable de entorno PORT: Requerido para K8s, ECS, Cloud Run.
Un proceso por contenedor: Separa las imágenes de API y de worker.
/health para liveness: Sin llamadas a la base de datos; 200 rápido - Sondas de Salud y Preparación.
/ready para readiness: Verifica la base de datos principal con un tiempo de espera corto.
Sonda de inicio para arranques lentos: Migraciones y calentamiento de caché antes de liveness.
Falla la preparación en el drenaje de SIGTERM: Detén el tráfico nuevo antes del apagado - Apagado Elegante.
Sin secretos en las capas: Inyecta a través de secretos del orquestador en tiempo de ejecución.
Sin .env en COPY: Usa .dockerignore y argumentos de compilación de CI solo para metadatos no secretos.
Compila módulos nativos dentro de la etapa de compilación de Linux: Nunca copies node_modules del host.
Escanea imágenes en CI: Trivy, Grype o escaneo nativo de ECR antes del despliegue.
Etiqueta imágenes con el SHA de git: :main no es una etiqueta de despliegue; usa etiquetas SHA inmutables.
Despliega el mismo artefacto probado en CI: Compila una vez, promueve el resumen - Mejores Prácticas de CI/CD.
NODE_ENV=production en tiempo de ejecución: Habilita las rutas de código de producción en los frameworks.
Registra en stdout/stderr: Sin registro de archivos dentro de los contenedores.
Establece solicitudes de recursos a partir de pruebas de carga: El límite de memoria debe exceder el RSS bajo carga p99 - HPA y Límites de Recursos.
Documenta la paridad local de docker compose: Los mismos nombres de variables de entorno que los manifiestos de K8s.
Revisa el tamaño de la imagen trimestralmente: docker history y auditoría de dependencias cuando el tamaño crece 2x.
La compilación multi-etapa con npm ci --omit=dev en la etapa final. Reduce el tamaño, la superficie de ataque y la fuga de herramientas de desarrollo en un solo cambio.
Después de que la compilación multi-etapa de bookworm-slim funcione de manera confiable. Distroless es un paso de endurecimiento de seguridad, no un requisito del primer día.
PRs automatizados semanales de Renovate para actualizaciones de resúmenes, además de una reconstrucción inmediata en caso de avisos críticos de seguridad de Node.
Sí. Kubernetes ejecuta contenedores; alguien debe construir y escanear la imagen. CI realiza la compilación; los desarrolladores depuran localmente.
DevDependencies solo en la etapa de compilación. Nunca envíes typescript o @types/* a producción a menos que tengas una razón documentada.
Versiones de la pila: Esta página fue escrita para Node.js 24.18.0 (LTS Activo), npm 10+, TypeScript 5.6+, Express 5, Fastify 5 y NestJS 11.
Revisado por Chris St. John·Última actualización: 16 jul 2026