Hola comunidad, estoy reestructurando el despliegue de una API en Node.js (Express) con conexión a PostgreSQL. Mi Dockerfile actual es un "monstruo" de una sola etapa: instala dependencias, compila assets, copia todo y corre la app. Funciona, pero la imagen pesa casi 1.8GB.
He investigado sobre multi-stage builds. Mi idea es:
Stage 1 (builder): Usar node:18-alpine, instalar dependencias (incluyendo devDependencies para TypeScript), compilar TS a JS.
Stage 2 (production): Usar node:18-alpine, copiar solo node_modules (producción) y los JS compilados desde el builder. Instalar solo postgresql-client para healthchecks.
Mi duda de arquitectura: ¿Vale la pena la complejidad? La app necesita ejecutar migraciones de DB al iniciar (knex migrate:latest). En el enfoque multi-stage, ¿dónde y cuándo las ejecuto? ¿En el stage final como parte del CMD, o en un entrypoint script? Temo que el builder se quede sin las herramientas de knex si solo copio node_modules de producción.
¡Agradezco reviews de lógica y mejores prácticas!