Skip to content

Instantly share code, notes, and snippets.

@daniel-baf
Last active July 25, 2025 03:53
Show Gist options
  • Select an option

  • Save daniel-baf/7fdd08ebb3b4b1e844d56373d75063f6 to your computer and use it in GitHub Desktop.

Select an option

Save daniel-baf/7fdd08ebb3b4b1e844d56373d75063f6 to your computer and use it in GitHub Desktop.
Correccion 2025 para el video de curso de docker Hola Mundo

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:

  1. En el package.json agregué nodemon en devDependencies para facilitar el desarrollo con recarga automática:

    "devDependencies": {
      "nodemon": "^3.1.10"
    }
  2. También añadí un script personalizado en la sección scripts:

    "dev": "nodemon --watch . --ext js,json --exec node index.js"
  3. En el Dockerfile.dev eliminé la línea version (obsoleta en las últimas versiones de Docker) y modifiqué la estructura para optimizar la cache:

    • Primero copié solo package*.json para 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 dev con: CMD ["npm", "run", "dev"].
  4. En el archivo docker-compose-dev.yml:

    • Reemplacé links por la propiedad depends_on: monguito, que es la forma recomendada.
    • Monté los volúmenes correctamente, incluyendo un volumen anónimo en /home/app/node_modules para evitar que la carpeta de dependencias del contenedor sea sobrescrita por la local.
services:
app:
build:
context: .
dockerfile: Dockerfile.dev
container_name: miapp-dev
ports:
- "3000:3000"
volumes:
- .:/home/app
- /home/app/node_modules
depends_on:
- monguito
networks:
- mi_red
monguito:
image: mongo:latest
container_name: monguito-dev
restart: always
environment:
MONGO_INITDB_ROOT_USERNAME: nico
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- "27017:27017"
networks:
- mi_red
volumes:
- mongodata:/data/db
networks:
mi_red:
driver: bridge
volumes:
mongodata:
# Dockerfile.dev
FROM node:18
WORKDIR /home/app
COPY package*.json ./
RUN npm install
RUN npm install --save-dev nodemon
COPY . .
EXPOSE 3000
CMD ["npm", "run", "dev"]
{
"name": "mongoapp",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon --watch . --ext js,json --exec node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.18.1",
"mongoose": "6.4.1"
},
"devDependencies": {
"nodemon": "^3.1.10"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment