¿Cuántas veces no has tenido que instalar tus bases de datos y herramientas en el sistema operativo para de esa manera poder desarrollar vuestros proyectos?
¿Cuántas veces no has tenido que actualizar herramientas viejas para utilizar las nuevas versiones?
¿Cuántas veces has roto el sistema tratando de hacer todas estas actualizaciones e instalación de paquetes y dependencias?
Pues sí, estos son algunos de los dolores de cabeza que vamos a perder en cuanto empecemos a utilizar Docker en nuestra vida cotidiana.
No recuerdo la última vez que instalé en mi sistema operativo una herramienta o una BD. Con Docker es muy sencillo configurar y levantar la mayoría de las herramientas que puedas necesitar en tu día a día de desarrollo. Contando además con la ventaja de que podrías decidir cuándo o no necesitas dichas herramientas, porque solo tendrías ejecutandose aquellas que necesites en el momento que las necesites.
Sin más preámbulo, pretendo con este artículo presentarte como de manera muy sencilla, podemos configurar nuestras bases de datos (BD) de mongoDB, esperando que con suerte, sirva este conocimiento de base para cuando necesites otras herramientas similares.
NOTA: El objetivo del artículo es mostrar cómo de manera muy sencilla podemos configurar mongoDB con Docker, por lo que no me detendré en cómo instalar o configurar Docker.
Da hasta miedo lo fácil que esto puede ser y lo corto que puede llegar a ser este artículo, por lo que procuraré explicar detenidamente lo que haremos para desplegar nuestra BD.
Mencionar, que utilizaremos la última versión de mongoDB (al menos a la fecha en que se está escribiendo este artículo): mongo:4.4
.
Dicho esto, solo queda crear el fichero de configuración de docker-compose para levantar nuestra BD. A continuación muestro cómo podría quedar la configuración del mismo.
docker-compose.yml
version: "2.4"
services:
mongo_db:
image: mongo:4.4
restart: always
volumes:
- dbvolume:/data/db
ports:
- "27018:27017"
5 | image: mongo:4.4
: en está línea se define la imagen de docker que vamos a utilizar. Como antes mencioné, la imagen va a ser la última versión disponible en dockerhub de mongodb.6 | restart: always
: con esta propiedad, estamos definiendo que el contenedor de docker que vamos a crear, tiene que reiniciar siempre que por algún motivo se detenga (ya sea por errores o malfuncionamiento del mismo) además de que este se iniciará al inicio del sistema operativo. Si tenemos una computadora con pocos recursos, esta línea es mejor eliminarla.8 | - dbvolume:/data/db
: en la sección de volumes, lo que se busca es almacenar la información de nuestro contenedor incluso cuando este es eliminado o actualizado. Pasa mucho que por determinados motivos necesitamos actualizar nuestro contenedor de docker a la más reciente versión de mongoDB. Pues en estos casos, si los datos de la BD están correctamente guardados en un volumen (este volumen puede ser interno de Docker o externo en nuestro SO), los cambios pueden realizarse sin perder la información de dicha BD.10| - "27018:27017"
: los puertos los utilizaremos para definir cuales serán los puertos a través de los cuales utilizaremos el contenedor de Docker en nuestra PC. Esto permite que podamos tener más de un Docker de mongoDB y cada uno utilizando un puerto diferente de nuestro SO. En el ejemplo anterior, el primer puerto (27018) significa el puerto que se utilizará en nuestra PC y el segundo es el puerto interno al que será mapeado dentro del contenedor.Si docker-compose se encuentra correctamente instalado, iniciar la configuración antes expuesta, es tán sencillo cómo:
docker-compose up -d
Hecho esto, podemos comprobar si nuestra BD está corriendo correctamente con el siguiente comando docker ps
, por lo cual deberíamos obtener un resultado como el siguiente:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1f427d47617b mongo:4.0.13 "docker-entrypoint.s…" 9 months ago Up 4 months 27018->27017/tcp mongo_db
Llegados a este punto, ya están listos para utilizar su flamante servidor de mongoDB que tienen corriendo en su computadora.
Como extra, creo interesante compartir cómo pueden hacer backups a su BD. Aunque esto no es algo que realmente necesitemos en nuestro entorno local, no es menos cierto que es algo que vamos a utilizar en los despliegues de nuestros proyectos, por lo que si les hiciera falta, aquí se los dejo.
Para las salvas automáticas de nuestra BD, utilizaremos una imagen de Docker que ya viene provista de las herramientas necesarias y que hará todo el trabajo por nosotros a la hora de salvar, recuperar y velar por nuestros datos. La imagen de la que hablo es la siguiente: intersoftlab/mongodb-backup
.
¿Qué necesitamos hacer para integrar esta imagen de Docker a nuestro mongoDB?
Pues muy sencillo, solo hay que agregar a la configuración anterior, lo siguiente:
docker-compose.yml
version: "2.4"
services:
mongo_db:
image: mongo:4.4
restart: always
volumes:
- dbvolume:/data/db
ports:
- "27018:27017"
backup_db:
image: intersoftlab/mongodb-backup
restart: always
environment:
- MONGODB_HOST=mongo_db
- MONGODB_PORT=27017
- MAX_BACKUPS=30
- INIT_BACKUP=true
volumes:
- dbvolume:/backup
La mayoría de las propiedades utilizadas en este nuevo contendor, son similares a las explicadas anteriormente, pero se agregan algunos environments que explicaré a detalle, aunque en la documentación de esta imagen pueden encontrar todos los environment disponibles y para que utilizarlos.
16| - MONGODB_HOST=mongo_db
: define el host de la BD a la que se debe conectar para hacer el backup. En este caso, como la BD se encuentra en un contenedor de Docker de nombre mongo_db
, es posible referenciarlo directamente por su nombre.17| - MONGODB_PORT=27017
: define el puerto a través del cual conectarse a la DB. En este caso, como ambos contenedores de Docker se encuentras en la misma subred interna, pues se utiliza el puerto interno del contenedor y no el puerto externo.18| - MAX_BACKUPS=30
: define la máxima cantidad de backups que almacenará. En este caso tendrá un límite de 30 salvas, a partir de este punto eliminará siempre la última para crear las nuevas salvas de la BD.19| - INIT_BACKUP=true
: al estar esta propiedad con el valor true
, significa que en el momento en que inicia el contenedor, se hace automáticamente una salva de la BD.Al igual que en el ejemplo anterior, para iniciar los contenedores de Docker, solo es necesario utilizar el comando docker-compose up -d
y luego se puede comprobar que están correctamente funcionando con el comando docker ps
, de lo que obtendremos el siguiente resultado
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e15bf74460de intersoftlab/mongodb-backup "/run.sh" 9 months ago Up 4 months backup_db
1f427d47617b mongo:4.0.13 "docker-entrypoint.s…" 9 months ago Up 4 months 27018->27017/tcp mongo_db
Espero que haya sido interesante y de ayuda el artículo. Lo aquí presentado, no es más que la experiencia de varios años trabajando con esta herramienta y las configuraciones que utilizo tanto en mis entornos locales como los que utilizo para el despliegue de mis proyectos.
Si te ha sido interesante o sencillamente te ha ayudado en algo el artículo, no dudes en compartirlo y hacerlo llegar a otras personas que posiblemente también lo necesiten.
Happy coding!!!