Para quienes buscan una solución actualizada y siguiendo buenas prácticas en 2025 (sin usar configuraciones "legacy"), aquí les comparto mi enfoque:
En el video original, se copia todo el código con COPY . ., lo cual incluye la carpeta node_modules. Esto va en contra de la idea principal de Docker: que todas las dependencias se instalen dentro del contenedor, garantizando un entorno limpio y consistente.
Por eso hice algunos ajustes:
-
En el
package.jsonagreguénodemonendevDependenciespara facilitar el desarrollo con recarga automática:"devDependencies": { "nodemon": "^3.1.10" }
-
También añadí un script personalizado en la sección
scripts:"dev": "nodemon --watch . --ext js,json --exec node index.js"
-
En el
Dockerfile.develiminé la líneaversion(obsoleta en las últimas versiones de Docker) y modifiqué la estructura para optimizar la cache:- Primero copié solo
package*.jsonpara aprovechar la cache de Docker. - Luego instalé las dependencias con
RUN npm install. - Después copié el resto de los archivos.
- Expuse el puerto 3000.
- Finalmente, el comando de ejecución invoca el script
devcon:CMD ["npm", "run", "dev"].
- Primero copié solo
-
En el archivo
docker-compose-dev.yml:- Reemplacé
linkspor la propiedaddepends_on: monguito, que es la forma recomendada. - Monté los volúmenes correctamente, incluyendo un volumen anónimo en
/home/app/node_modulespara evitar que la carpeta de dependencias del contenedor sea sobrescrita por la local.
- Reemplacé