Levantar una base de datos MongoDB sin instalar drivers ni ensuciar tu máquina es posible gracias a Docker. En lugar de llenar tu equipo con controladores de distintas bases de datos, puedes crear un contenedor aislado, experimentar con él y, cuando ya no lo necesites, simplemente eliminarlo. Esta forma de trabajo es estándar en la industria y resulta esencial tanto para backend como para data science.
¿Por qué usar Docker para correr MongoDB?
Docker es un sistema que permite ejecutar cualquier software dentro de un contenedor, una parte aislada de tu computadora que funciona de manera eficiente y práctica [0:18]. Si hoy trabajas con MongoDB y mañana quieres probar Cassandra o CouchDB, no necesitas acumular drivers: levantas un contenedor, haces tu prueba y lo eliminas sin consecuencias para tu sistema operativo.
En entornos profesionales, los equipos levantan sus bases de datos en Docker precisamente porque elimina los problemas de compatibilidad con drivers y facilita la colaboración. Además, puedes especificar la versión exacta de MongoDB que necesitas, lo cual te da control total sobre tu entorno de desarrollo [1:22].
¿Cómo crear el archivo docker-compose.yaml para MongoDB?
El primer paso es crear un archivo llamado docker-compose.yaml dentro de la carpeta de tu proyecto. Este archivo define los servicios que quieres levantar, como una API, una cola de tareas o, en este caso, una base de datos [2:09].
yaml
version: '3.9'
services:
mongodb:
image: mongo:5.0
ports:
- 27017:27017
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=root123
volumes:
- ./mongo_data:/data/db
¿Qué significa cada sección del archivo?
- version: indica la versión del formato de Docker Compose, no la de Docker como tal.
- services: define los servicios a levantar; el nombre puede ser el que prefieras, aunque se recomienda usar el nombre de la base de datos.
- image: especifica la imagen y versión que Docker traerá desde Docker Hub [2:45]. Si no colocas versión, tomará la última disponible, lo cual puede generar incompatibilidades.
- ports: el puerto 27017 es el que MongoDB utiliza por defecto para recibir comunicación [3:30].
- environment: las variables de ambiente definen el usuario y contraseña de acceso a la base de datos local.
- volumes: resuelven el problema de los contenedores stateless [5:05].
¿Qué son los volúmenes y por qué necesitas persistencia?
Los contenedores Docker son stateless, es decir, no guardan estado por defecto. Como una base de datos necesita conservar información, se utilizan volúmenes para hacer un binding entre una carpeta local y la ruta interna donde MongoDB almacena sus datos (/data/db) [5:15]. Es importante agregar la carpeta mongo_data al archivo .gitignore para no subir datos de la base de datos al repositorio, ya que sería una mala práctica [6:02].
¿Cómo levantar y verificar el contenedor de MongoDB?
Desde la terminal, ejecuta el siguiente comando para iniciar el servicio en segundo plano [7:00]:
bash
docker compose up -d mongodb
La primera vez que lo ejecutes, Docker realizará un proceso de pulling para descargar la imagen desde Docker Hub. Esto solo ocurre una vez; en ejecuciones posteriores, el sistema de caché lo resuelve de forma automática [7:30].
Para verificar que el contenedor está corriendo:
bash
docker compose ps
Este comando te mostrará el nombre del servicio, su estado y el puerto en el que está disponible.
¿Cómo conectarte desde Mongo Compass y Visual Studio Code?
En Mongo Compass, crea una nueva conexión con la URL mongodb://localhost:27017, configura la autenticación con el usuario y contraseña definidos en las variables de ambiente, y desactiva SSL ya que es una conexión local [8:20].
Una vez conectado, puedes crear bases de datos y colecciones directamente. Por ejemplo, una base de datos llamada platzi_store con una colección products donde insertas documentos con campos como name y price [10:15].
Desde Visual Studio Code, usando la extensión de MongoDB, conectas con la misma URL y puedes ejecutar consultas en el playground [11:05]:
javascript
use('platzi_store');
db.products.find();
Este comando devuelve todos los documentos de la colección products.
Docker se convierte en una herramienta transversal en tu carrera, tan fundamental como saber Git. Si quieres profundizar, hay cursos especializados que cubren cada detalle. ¿Ya lograste levantar tu contenedor? Comparte tu experiencia en los comentarios.