Diego Orozco by Diego Orozco on May 4, 2022

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
<< Configurar un cliente de VPN tipo SSTP en MacOS | Crea un Contenedor de Kali Linux >>