Una de las cosas que nos puede dar un poco de pereza cuando nos encontramos desarrollando algún proyecto es la configuración de una base de datos para pruebas. Anteriormente, debido a varios factores - entre ellos mi conexión a internet - prefería usar por defecto SQLite para el proceso de desarrollo y para el despliegue del sistema en producción implementaba un motor de DB más apropiado; sin embargo, al momento de hacer el despliegue me encontraba con errores relacionados a las consultas o queries que hacía, a pesar de que usaba ORM que, en teoría, traducen la consulta a cualquier manejador de base de datos.
Desde que uso Docker, el proceso de despliegue me es indiferente ya que desde el proceso de desarrollo selecciono y utilizo la base de datos libremente.
Instalar Docker
Para instalar Docker simplemente descárgalo en el siguiente enlace https://www.docker.com/products/docker-desktop y selecciona tu sistema operativo (MacOS o Windows). En el caso de Linux, la instalación se hace a través del gestor de paquetes, [aquí] (https://runnable.com/docker/install-docker-on-linux) un sitio con las indicaciones.
Para empezar a usarlo tendremos que generar una cuenta e iniciar sesión en Docker.
Una vez iniciado, podemos verificar que el servicio esté activo con el comando docker ps
que, al ser una instalación nueva solo nos desplegará lo siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Por defecto el servicio arrancará automáticamente al iniciar tu sistema operativo, en caso de preferir iniciar el servicio manualmente, puedes desactivarlo en los ajustes de Docker Desktop e iniciarlo cuando lo necesites con el siguiente comando open --background -a Docker
Descargar una imagen con MongoDB
En el sitio https://hub.docker.com podemos ver el catálogo de imágenes de OS y servicios para contenedores. En este caso descargaremos la versión más reciente de la imagen oficial de MongoDB utilizando el siguiente comando:
docker pull mongo:latest
Mientras se descarga la imagen, podemos ir creando nuestro archivo de configuración, el cual tendrá los ajustes necesarios para crear y arrancar el contenedor.
Establecer la configuración inicial de nuestro contenedor
Para este paso es necesario crear una carpeta especial para nuestro contenedor e ingresar a ésta para generar el archivo YAML con los parámetros necesarios.
mkdir mongodb
cd mongodb
mkdir mongo-volume
Asimismo, para que nuestros datos tengan persistencia y no sean eliminados cada vez que reiniciamos o eliminemos el contenedor, creamos la carpeta mongo-volume para guardar la información de nuestra base de datos.
Ahora generaremos el archivo docker-compose.yml
nano docker-compose.yml
y escribiremos lo siguiente:
version: "3.7"
services:
mongodb_contenedor:
image: mongo
environment:
- MONGO_INITDB_DATABASE=thedbname
- MONGO_INITDB_ROOT_USERNAME=userforthedb
- MONGO_INITDB_ROOT_PASSWORD=password
volumes:
- ./mongo-volume:/data/db
ports:
- 27017:27017
Con estos parámetros le indicamos que genere un contenedor “mongodb_contenedor” con la imagen del servidor MongoDB y las credenciales de acceso indicadas; en el apartado volumes le indicamos que monte como volumen externo la carpeta que creamos; y, finalmente establecemos el puerto por el cual recibirá todas las conexiones a la DB, en este caso usaremos el que tiene por defecto MongoDB.
Una vez listo el archivo, guardamos cambios y regresamos a la línea de comandos para ejecutar lo siguiente
docker-compose up -d
El servicio docker-compose generará el contenedor con base en los parámetros que indicamos en el archivo .yml y la opción -d es para que ejecute el contenedor en segundo plano. Si deseas estar monitoreando el registro del contenedor, puedes ejecutarlo sin la opción -d
Para verificar que nuestro contenedor se esté ejecutando, utiliza el siguiente comando:
docker ps
¡Listo! Con esto ya tienes tu servidor MongoDB listo para que trabajes en tu app.
Instrucciones adicionales
Para iniciar una sesión en la terminal de nuestro contenedor, es necesario que copies su id y se lo indiques como aparece a continuación:
docker exec -it <container id> bash
Los comandos disponibles para la gestión del contenedor son los siguientes:
//Genera y arranca/inicia el contenedor
docker-compose up
//Inicia el contenedor
docker-compose start
//Detiene el servicio del contenedor
docker-compose stop
//Elimina el contenedor
docker-compose down
Cabe mencionar que estos comandos se deben ejecutar dentro de la carpeta que generamos ya que debe existir el archivo “docker-compose.yml” o “docker-compose.yaml”.
Sesión interactiva con MongoDB
mongo admin -u root -p rootpassword
show dbs
use nueva_db
Con el comando show dbs
puedes ver la lista de bases de datos en el servidor, y con el comando use puedes seleccionar (en caso de que exista) o crear una nueva base de datos.
Cadena de conexión o connection string
Para conectarte a tu base de datos desde un cliente (ya sea Compass o tu app) es necesario que proporciones la siguiente cadena:
mongodb://userforthedb:password@127.0.0.1:27017/thedbname?authSource=admin
Referencias
- https://docs.docker.com/compose/
- https://docs.mongodb.com/manual/
- https://medium.com/faun/managing-mongodb-on-docker-with-docker-compose-26bf8a0bbae3