Cómo implementar y gestionar un contenedor Docker MongoDB

MongoDB es una base de datos de documentos popular y de código abierto que ofrece un alto rendimiento y gran flexibilidad. Pero ¿has intentado contenerizar una base de datos MongoDB para tus proyectos? Si no lo has hecho, ¡entonces estás a punto de llevarte una sorpresa!

En este tutorial, aprenderás cómo implementar, asegurar y gestionar MongoDB de manera efectiva con Docker. Así que sigue leyendo y conviértete en tu propio maestro en implementar contenedores de MongoDB con Docker!

Requisitos previos

Este tutorial incluye demostraciones prácticas. Para seguirlo, asegúrate de tener lo siguiente:

  • Una máquina Ubuntu – Este tutorial utiliza Ubuntu 20.04 LTS
  • A user with sudo permission
  • Docker – Este tutorial utiliza Docker 20.10.9

Descargando la imagen de Docker MongoDB

Antes de poder implementar y gestionar un contenedor de Docker MongoDB, primero debes descargar una imagen de MongoDB desde Docker Hub para poder ejecutar el contenedor MongoDB localmente.

Ejecute el comando docker a continuación para descargar la imagen de la Edición Comunitaria (CE) de MongoDB (pull mongo), que aloja Docker Hub. La versión más reciente de esta imagen en el momento de la redacción es 4.2.

sudo docker pull mongo

Como puede ver a continuación, el comando automáticamente descarga la última versión de la imagen y la etiqueta como latest.

Pulling mongo image

Ahora ejecute el comando docker images a continuación para listar todas las imágenes disponibles en su servidor.

sudo docker images

A continuación, puede ver la imagen de MongoDB etiquetada como latest.

Listing all Docker images

Implementación de un Contenedor Docker MongoDB

A partir de la imagen de MongoDB que descargó, ahora puede implementar un contenedor de MongoDB. Inicializará su contenedor de MongoDB con el ejecutable mongo, creará un directorio de datos. Luego definirá la asignación entre el área de datos del contenedor Docker y la máquina host.

1. Ejecute el comando mkdir a continuación para crear un directorio de datos llamado mongodata para almacenar la base de datos y los registros de MongoDB.

sudo mkdir -p /mongodata

2. A continuación, ejecute el comando docker run a continuación para crear un contenedor con el nombre mymongo. Además, el contenedor se inicia con un pseudo-TTY interactivo (-it), en caso de que se deba mostrar la salida al iniciar el contenedor.

Finalmente, el directorio recién creado mongodata está vinculado (-v) al directorio interno, /data/db. La opción -d inicia el contenedor en el modo desconectado, por lo que se ejecuta como un proceso en segundo plano y devuelve la salida de la consola al crearlo.

El sistema crea automáticamente el directorio /data/db cuando ejecutas el contenedor para almacenar datos de los cambios que realizas en el contenedor. Este directorio se ejecuta de manera similar al modo de solo lectura y permite el almacenamiento de datos persistente en el sistema host.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

Una vez que el comando se complete correctamente, verás una salida como la que se muestra a continuación.

Deploying MongoDB Container

3. Por último, ejecuta el comando docker ps a continuación para identificar el ID del contenedor y verificar su estado. El comando docker ps muestra toda la información sobre el contenedor que se está ejecutando actualmente.

El comando docker ps es comparable al comando regular ps en Linux.

sudo docker ps

En la salida que se muestra a continuación, puedes ver una sección de Puertos que lista todos los puertos asignados al contenedor para escuchar conexiones entrantes.

En este ejemplo, el puerto 27017 está mapeado al host. La siguiente salida indica que puedes acceder a la instancia de MongoDB en este contenedor a través de localhost:27017 desde el host.

Checking Docker MongoDB Container Status

Tal vez quieras ver el archivo de registro del contenedor mymongo para determinar qué sucedió en tu base de datos/instancia de mongo cuando algo salió mal. Si es así, ejecuta el comando docker logs, así: sudo docker logs docker-container. Reemplaza docker-container con el nombre de tu contenedor Docker.

Reading Docker Container Log File

Adjuntar el Contenedor Docker MongoDB a la Shell de Bash

Acabas de implementar un contenedor Docker MongoDB, pero ¿cómo lo gestionas? Hazlo adjuntando el contenedor Docker a la shell de Bash con el comando docker exec primero.

Adjuntar tu contenedor a la shell de Bash es crucial ya que el contenedor se está ejecutando actualmente en modo desvinculado (en segundo plano). Y si el contenedor se ejecuta en segundo plano, no recibirá ninguna entrada ni mostrará ninguna salida.

Ejecuta el comando docker exec abajo para adjuntar tu contenedor (mymongo) a la shell de Bash.

sudo docker exec -it mymongo bash

Cuando el comando se complete, tu indicador cambiará a algo como el que se muestra a continuación. El número alfanumérico único (77782fa95314) es la identificación del contenedor.

Los IDs de contenedor son esenciales para evitar conflictos de nombres e identificar eficazmente los contenedores entre hosts, así que trata de no cambiarlos.

Attaching Docker MongoDB Container to Bash Shell

Ahora ejecuta el comando mongo sin ningún argumento para iniciar sesión en la shell de MongoDB en el contenedor (mymongo). La shell de MongoDB es donde ejecutas tus consultas/comandos de mongo.

Una vez que estés en el contenedor, puedes ejecutar cualquier comando sin el prefijo sudo ya que ahora eres un usuario root dentro del contenedor. Cada cambio que realices en el contenedor no afectará tu sistema host.

mongo

Observando el indicador que se muestra a continuación, puedes saber que ahora estás en la shell de MongoDB.

Logging in to the MongoDB shell

Si prefieres ver todos los comandos disponibles en la shell de MongoDB, ejecuta el comando help, como se muestra a continuación.

Listing Available Commands in MongoDB Shell

Creación de un Usuario Administrativo de MongoDB

Después de haber desplegado un servidor MongoDB dentro de un contenedor Docker, ahora crearás un usuario administrativo de MongoDB. Un usuario administrativo te permite conectarte al servidor MongoDB y gestionar bases de datos.

1. Inicia sesión en la shell de MongoDB nuevamente y ejecuta el use comando a continuación para cambiar primero a la base de datos admin. Al hacerlo, se proporcionan al usuario administrativo los permisos adecuados para gestionar las bases de datos.

use admin
Switching to the Admin Database

Copia y pega el siguiente código en el prompt de MongoDB para crear un usuario administrativo.

El código a continuación utiliza el método db.createUser() para crear un usuario con roles administrativos. El nombre de usuario (user) y la contraseña (pwd) a continuación están codificados, los cuales puedes cambiar según tu preferencia.

# Crear un usuario administrativo
db.createUser(
{
	# Establece el nombre de usuario para el usuario administrativo
	user: "ata",
	# Establece la contraseña para el usuario administrativo
	pwd: "password123",
	# Establece los roles para el usuario administrativo
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Si el código funciona, obtendrás un mensaje como el siguiente en tu prompt de MongoDB.

Creating an Administrative New User

3. Ejecuta la consulta quit() a continuación para salir del shell de MongoDB.

quit()

4. Finalmente, ejecuta el siguiente comando mongo para probar el usuario administrativo que creaste (ata) conectándote al servidor de MongoDB. Ingresa la contraseña del usuario administrativo cuando se te solicite.

mongo -u ata -p --authenticationDatabase admin

Como puedes ver a continuación, el servidor de MongoDB imprime la versión del servidor de MongoDB si te conectas al servidor correctamente.

Connecting to the MongoDB Server

Tal vez quieras probar aún más al usuario administrativo. Si es así, ejecuta los siguientes comandos para mostrar todos los usuarios en la base de datos.

use admin
show users

A continuación, puedes ver que el usuario administrativo que creaste está en la lista.

Listing Users in Database

Creando una Base de Datos MongoDB

Gestionar un contenedor Docker MongoDB no estaría completo sin crear una base de datos. Crearás una nueva base de datos MongoDB en la que almacenarás datos a través de la shell de MongoDB.

1. Desde una sesión interactiva dentro del contenedor Docker, ejecuta el comando show dbs a continuación para listar todas las bases de datos en tu servidor.

show dbs

A continuación, puedes ver una base de datos de admin, una base de datos de configuración y una base de datos local. La shell de MongoDB crea estas bases de datos automáticamente en cada servidor de MongoDB.

Listing all MongoDB Databases

2. A continuación, ejecuta el comando use a continuación para crear una nueva base de datos. Reemplaza <nombre_de_base_de_datos> con el nombre de la base de datos que elijas. Pero para este ejemplo, la base de datos se llama linux.

La consulta use cambia la base de datos actual a la que especifiques si existe. Si no existe, la consulta use crea una nueva base de datos y cambia automáticamente a ella.

use <database_name>
Creating a new MongoDB Database

3. Vuelve a ejecutar el comando show dbs como lo hiciste anteriormente (paso uno) para ver si la base de datos que creaste existe.

show dbs

Aún no veo la base de datos recién creada (Linux) en la lista. MongoDB construye la base de datos solo cuando almacenas datos en ella por primera vez. Los datos pueden estar en forma de una colección o incluso un documento.

Listing all MongoDB Databases

4. Ahora copia/pega el código a continuación en la consola de MongoDB y presiona Enter.

El código a continuación crea una nueva colección llamada linux_version, que puedes cambiar al nombre que prefieras. La colección contiene datos en formato de pares clave:valor.

# Usando el método insertOne para insertar datos
db.linux_version.insertOne(
	# Pares clave:valor para insertar en la base de datos
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

En la salida a continuación, puedes ver que la colección linux_version está creada y viene con un ObjectID.

Showing collection with its ID

5. Ejecuta el comando show collections para ver una lista de colecciones y verifica si la nueva colección linux_version existe.

show collections

Puedes ver a continuación que has creado con éxito la colección linux_version.

Showing List of Collections

6. Finalmente, ejecuta el comando a continuación para ver y confirmar que los datos que insertaste en la colección linux_version son correctos. El método pretty() te permite visualizar los datos en un formato legible para humanos.

db.linux_version.find().pretty()

Si alguna vez modificas los datos en la base de datos, utiliza el método Update().

Puedes ver que la salida a continuación está en un formato mucho más legible.

Viewing Data from MongoDB Database

Reiniciar el Contenedor Docker de MongoDB

En este punto, tienes un contenedor Docker de MongoDB en funcionamiento con éxito. Pero, ¿qué pasa si ya no necesitas el contenedor o si no está funcionando? Algunos comandos de Docker pueden ayudarte a detener, reiniciar e incluso eliminar un contenedor Docker de MongoDB.

1. Ejecuta el comando docker ps a continuación para listar todos los contenedores en ejecución.

sudo docker ps

Observa el nombre y el ID del contenedor que deseas detener, reiniciar o eliminar, como se muestra a continuación.

Showing all running docker containers

2. Luego, ejecuta uno de los comandos docker stop a continuación para detener un contenedor MongoDB en ejecución.

sudo docker stop mymongo
sudo docker stop container-ID

3. Vuelve a ejecutar el comando docker ps como lo hiciste anteriormente (en el paso uno) para verificar si el contenedor se ha apagado.

sudo docker ps

Como puedes ver a continuación, el contenedor no está en la lista de contenedores en ejecución, lo que indica que has detenido el contenedor con éxito.

Listing all Containers

4. Ahora ejecuta cualquiera de los comandos docker start a continuación si decides reiniciar un contenedor.

sudo docker start mymongo
sudo docker start container-ID

5. Por último, vuelve a ejecutar el comando docker ps para ver si el contenedor está en ejecución.

sudo docker ps

Tal vez ya no necesites más un contenedor. Si es así, primero debes detener el contenedor y luego ejecutar el comando rm para eliminarlo, así: sudo docker container rm mongodb. Similar a los ejemplos anteriores, reemplaza mongodb con el nombre o ID del contenedor.

Conclusión

En este tutorial, has aprendido cómo implementar y administrar un contenedor Docker MongoDB creando un usuario administrador para crear una base de datos y almacenar datos en ella. Te has dado cuenta de que puedes detener, reiniciar y eliminar contenedores que ya no necesitas para mantener limpias tus imágenes de Docker.

Implementar y administrar MongoDB con Docker es el primer paso para aprovechar la tecnología de contenedores y reducir los costos generales. ¿Por qué no aprovechar este primer paso para explorar MongoDB más y ver cómo un contenedor Docker MongoDB puede ayudar con tus proyectos?

Source:
https://adamtheautomator.com/docker-mongodb/