Binary Coffee

Configurar tus base de datos de MongoDB con Docker

bash docker linux mongodb
¬Ņ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. # Ficheros de configuraci√≥n de 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. ## Iniciar la BD 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. # Backups a la BD 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](https://hub.docker.com/r/intersoftlab/mongodb-backup) 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 ``` # Enlaces - [mongo image (dockerhub)](https://hub.docker.com/_/mongo) - [mongodb-backup image (dockerhub)](https://hub.docker.com/r/intersoftlab/mongodb-backup) - [ejemplo de configuraciones](https://github.com/dcs-community/blog-database) # Conclusiones 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!!!
Opiniones