Cómo ejecutar MongoDB como contenedor Docker

Cómo ejecutar MongoDB como contenedor Docker

  • ITOps y DevOps
5 min de lectura Actualizado Aug 26, 2024

Puntos clave: Ejecutar MongoDB como contenedor Docker simplifica el despliegue y mejora la portabilidad. La guía cubre los pasos de instalación de Docker y Docker Compose, la configuración de contenedores de MongoDB y configuraciones avanzadas como el uso de Mongo Express para una interfaz gráfica.

  • Los beneficios de usar MongoDB en Docker incluyen la consistencia entre los entornos.
  • Las configuraciones avanzadas permiten acceso seguro y monitorización mediante revisiones de salud.

Contenedores de MongoDB y Docker

Dado que MongoDB está entre las bases de datos NoSQL más populares hoy en día, puede que te resulte necesario ejecutar MongoDB como un contenedor Docker. En este artículo, tú conocerás:

Al final de este tutorial, analizaremos configuraciones avanzadas que te darán una idea de la extensibilidad de un proyecto contenedor. Crea un proyecto autónomo con una instancia de MongoDB y una interfaz web Mongo Express en una red dedicada, y un volumen Docker para maximizar la portabilidad del proyecto. Vamos a Obtén adelante.

Ventajas de usar MongoDB en un contenedor Docker

Docker están una herramienta para utilizar fácilmente contenedores para Crear, desplegar y ejecutar aplicaciones. Un contenedor es una unidad estándar de software que reúne aplicaciones y todas sus dependencias en un solo paquete. El valor de estos contenedores están en que el software puede ejecutarse en cualquier plataforma servidora, independientemente de su hardware o configuración.

te puede utiliza Docker para ejecutar instancias de MongoDB. Cuando te configuras instancias de contenedor de Docker de MongoDB, te puede Crea una base de datos NoSQL portátil y extensible. Esta instancia de MongoDB contenedor se comporta exactamente como una instancia de MongoDB no contenedorizada, sin preocuparse por la configuración del servidor.

Instalación de Docker

Comienza este tutorial configurando una instalación sencilla de Docker para ejecutar contenedores en un servidor basado en Ubuntu. Podemos Obtén los paquetes de instalación de Docker desde el repositorio oficial de Docker. Aquí son los pasos de instalación: 1. Actualizar los paquetes existentes.

    sudo apt update && sudo apt upgrade -y
MongoDB Docker 1.1 - actualizar los paquetes existentes

2. Instalar los paquetes previos.

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
MongoDB Docker 1.2 - instalar paquetes de prerrequisitos

3. Añadir la clave GPG del repositorio oficial de Docker.

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
MongoDB Docker 1.3 - clave GPG

4. Añadir el repositorio oficial de Docker a las fuentes APT.

    sudo add-apt-repository 
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
MongoDB Docker 1.4 - Repositorio Docker a fuente APT

5. Actualizar la lista de paquetes de Ubuntu.

    sudo apt update
MongoDB Docker 1.5 - actualizar la lista de paquetes de Ubuntu

6. Verifica el repositorio Docker.

    apt-cache policy docker-ce
MongoDB Docker 1.6 - verificar el repositorio Docker

7. Instala la edición comunitaria de Docker.

    sudo apt install docker-ce
MongoDB Docker 1.7 - Edición comunitaria de Docker

8. Comprobar el estado de la instalación con el siguiente comando. Si el estado del servicio vuelve activo (en ejecución), Docker está instalado y activo correctamente en el sistema.

    sudo systemctl status docker
MongoDB Docker 1.8 - Comprobación del estado de la instalación de Docker

Instalación de Docker Compose

Podemos utiliza la interfaz de línea de comandos (CLI) para Crea y gestiona contenedores Docker. Usar CLI puede ser tedioso cuando se trata de múltiples contenedores y configuraciones. En su lugar, te puede utiliza Docker Compose para tomar múltiples contenedores e integrarlos en una sola aplicación. Utiliza el formato YAML para Crea los archivos Compose que pueden ejecutarse fácilmente usando comandos docker-compose up o down que Crea o eliminarán todos los contenedores y configuraciones dentro de un archivo Compose, respectivamente. Vamos a instalar Docker Compose en el servidor Ubuntu. 1. Instalar la versión estable actual de Docker Compose.

    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
MongoDB Docker 2.1 - instala Docker Compose

2. Aplicar permisos ejecutables para el binario descargado.

    >sudo chmod +x /usr/local/bin/docker-compose
MongoDB Docker 2.2 - aplicar permisos ejecutables

3. Verifica la instalación de Docker Compose.

    docker-compose --version
MongoDB Docker 2.3 - verifica la instalación de Docker Compose

Configurando MongoDB usando un contenedor Docker Compose

Esta sección explica cómo configurar un contenedor de MongoDB usando un archivo Docker Compose. Antes de Crea el archivo Compose, busquemos la imagen oficial del contenedor de MongoDB usando el comando search.

    sudo docker search mongodb
MongoDB Docker 4.1 - Imagen del contenedor de MongoDB

Los resultados de búsqueda nos muestran que existe una imagen oficial de contenedor de MongoDB llamada "mongo" en el registro de contenedores de Docker. Por defecto, el contenedor de MongoDB almacena las bases de datos dentro del directorio /data/db dentro del contenedor.

Crea un directorio Docker Compose para almacenar MongoDB

A continuación, necesitamos Crea un directorio llamado "mongodb" para almacenar el archivo Docker Compose. Crea otro directorio llamado "database" dentro del directorio "mongodb" para mapear la ubicación del contenedor en la base de datos y Permite el acceso local a la base de datos. Nosotros utilizamos el operador -pv para Crea esas carpetas padre.

    >mkdir -pv mongodb/database
MongoDB Docker 4.2 - Crea Docker Compose directorio

El siguiente archivo de docker-compose.yml se creará dentro del directorio "mongodb" para construir el contenedor MongoDB. docker-compose.yml

    version: "3.8"
services:
mongodb:
image : mongo
container_name: mongodb
environment:
- PUID=1000
- PGID=1000
volumes:
- /home/barry/mongodb/database:/data/db
ports:
- 27017:27017
restart: unless-stopped

Usamos la versión 3.8 para Crea el archivo Compose anterior. La versión del archivo Compose se correlaciona directamente con:

  • ¿Qué opciones son disponibles dentro del archivo Compose.
  • La versión mínima compatible con Docker Engine.

En este caso, es el motor Docker 19.03.0 o más reciente.

Servicio MongoDB dentro del contenedor Docker

En el archivo Compose, hemos creado un servicio llamado "mongodb" usando la imagen de Docker "mongo." Hemos llamado al contenedor "mongodb" y hemos mapeado la carpeta de base de datos dentro del contenedor a la carpeta local de la base de datos (/home/barry/mongodb/database). Este tipo de mapeos son conocidos como volúmenes bind-mount. Las variables de entorno se son utilizadas para Define el "usuario" y el "grupo" del contenedor. Finalmente, mapeamos el puerto local 27017 al puerto interno 27017. Luego, la política de reinicio está configurada para reiniciar a menos que el usuario la detenga. Esta es la estructura de archivos del proyecto:

    tree mongodb
MongoDB Docker 4.3 - Servicio MongoDB

Inicio del contenedor Docker de MongoDB

Ve a la carpeta "mongodb" y ejecuta el comando docker-compose up para Comienza el contenedor de MongoDB. El operador -d ejecuta el contenedor separado como proceso en segundo plano.

    sudo docker-compose up -d
MongoDB Docker 4.4 - Comienza contenedor de MongoDB

El comando up extraerá la imagen "mongo" del registro Docker y Crea el contenedor usando los parámetros dados en el archivo docker-compose.yml. Vamos a verifica si el contenedor están ejecutándose y la carpeta local están llenada usando los siguientes comandos. El operador -a mostrará todos los contenedores dentro del sistema independientemente de su estado.

    sudo docker ps -a
MongoDB Docker 4.5 - verifica el contenedor Docker
    sudo tree mongodb
MongoDB Docker 4.6 - verifica el contenedor de MongoDB

Interactuar con MongoDB en un contenedor Docker

Usando el comando ejecutivo Docker, podemos acceder al terminal del contenedor MongoDB. Como el contenedor funciona en modo separado, utiliza el terminal interactivo Docker para establecer la conexión.

    sudo docker exec -it mongodb bash
Docker de MongoDB 5.1 - acceder al terminal de MongoDB

En el terminal bash del contenedor, llamamos al comando mongo para acceder a MongoDB. Para este ejemplo de MongoDB Docker Compose, Crea una base de datos llamada "food" y una colección llamada "fruits", junto con tres documentos. 1. Cambiar la base de datos.

    use food

2. Crea la colección.

    db.createCollection("fruits")

3. Insertar documentos

    db.fruits.insertMany([ {name: "apple", origin: "usa", price: 5}, {name: "orange", origin: "italy", price: 3}, {name: "mango", origin: "malaysia", price: 3} ])
MongoDB Docker 5.2 - Crea base de datos

Busca los documentos usando el comando buscar.

    db.fruits.find().pretty()
MongoDB Docker 5.3 - buscar documentos

El contenedor de MongoDB actuará como cualquier instalación normal de MongoDB, sin preocuparnos por la configuración de software y hardware subyacente. Usando el comando de salida, podemos salir tanto de la shell de MongoDB como de la shell del contenedor.

MongoDB Docker 5.4 - comandos de salida

Conexiones externas al contenedor de MongoDB

Al crear el contenedor de MongoDB, mapeamos el puerto interno de MongoDB al puerto correspondiente del servidor, exponiendo el contenedor de MongoDB a redes externas. El siguiente ejemplo de MongoDB Docker Compose demuestra cómo podemos conectarnos al contenedor desde un punto final externo simplemente apuntando el comando mongo al servidor y puerto correspondientes.

    mongo 10.10.10.60:27017
MongoDB Docker Compose 6.1 - conexiones externas

El comando find en nuestro ejemplo de MongoDB Docker Compose buscará la colección de frutas y sus documentos para verificar que son conectados al contenedor de MongoDB.

    show databases
use food
show collections
db.fruits.find().pretty()
MongoDB Docker 6.2 - verifica la conexión

Resiliencia de datos y recreación del contenedor Docker de MongoDB

Hemos mapeado la base de datos a una carpeta local para que, incluso si te quitas el contenedor, tú puedas utilizar los datos guardados en la carpeta local para recrear un nuevo contenedor de MongoDB. Vamos a probar eso. Vamos a:

  1. Elimina el contenedor usando docker-compose down.
  2. Borra las imágenes asociadas.
  3. Recrea una nueva base de datos MongoDB usando el archivo Compose y archivos de base de datos locales.

Quita el contenedor de MongoDB.

    sudo docker-compose down
MongoDB Docker 7.1 - Crea un nuevo contenedor

Elimina la imagen local de Mongo.

    sudo docker rmi mongo
MongoDB Docker 7.1 - eliminar la imagen de Mongo

Verifica los archivos locales de la base de datos. A partir de la salida siguiente, podemos identificar que, aunque eliminamos los contenedores, los datos asignados a un directorio local no Obtén eliminados.

    sudo tree mongodb
MongoDB Docker 7.2 - verificar archivos de base de datos

Recrear un nuevo contenedor Docker de MongoDB. Ahora, recrearemos el contenedor usando el archivo docker-compose.yml original. Ejecutamos el siguiente comando en la carpeta "mongodb".

    sudo docker-compose up -d
MongoDB Docker 7.3 - recrear el contenedor Mongo

Verifica los datos en el contenedor de MongoDB. Ahora accedamos a la carcasa bash en el contenedor y compruebemos las colecciones de "frutas".

    sudo docker exec -it mongodb bash
MongoDB Docker 7.4 - verificar el contenedor de Mongo
    show databases
use food
db.fruits.find().pretty()
MongoDB Docker 7.5 - mostrar base de datos

El resultado indica que hemos creado el nuevo contenedor con la información local de la base de datos asociada al nuevo contenedor. Además, podemos simplemente mover el contenedor moviendo la estructura local de carpetas a un nuevo servidor y creando un contenedor usando el archivo docker-compose.yml. te puede utiliza volúmenes Docker en lugar de guardar los datos localmente para aumentar la portabilidad de la base de datos.

Monitorización de los archivos de registro del contenedor MongoDB

Cada contenedor crea registros que te puede utiliza para supervisa y depurar el contenedor. Podemos acceder a los registros del contenedor usando el comando Docker logs con el nombre del contenedor a monitorizar.

    sudo docker logs mongodb
MongoDB Docker 8.1 - acceso a archivos de registro

Configuración de contenedores avanzados de Docker para MongoDB

En esta sección, Crea un contenedor MongoDB seguro que requiere un nombre de usuario y contraseña para acceder a la base de datos. En ejemplos anteriores de MongoDB Docker Compose, mapeamos los datos de la base de datos a una carpeta local. Este método están tedioso y requiere intervención manual al mover el contenedor Docker. Usando volúmenes Docker, podemos Crea volúmenes persistentes nativos de Docker que te pueden transferirse fácilmente entre instalaciones de Docker. Aunque podemos utiliza la CLI para manipular la instancia de MongoDB, una interfaz gráfica de usuario (GUI) están más conveniente. Mongo Express están una interfaz de administración de MongoDB basada en web que también puede ejecutarse como una aplicación contenedorizada. El archivo docker-compose resulta útil como un único archivo YAML que captura todos los requisitos. docker-compose.yml

    version: "3.8"
services:
mongodb:
image: mongo
container_name: mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=pass12345
volumes:
- mongodb-data:/data/db
networks:
- mongodb_network
ports:
- 27017:27017
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo 10.10.10.60:27017/test --quiet
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
mongo-express:
image: mongo-express
container_name: mongo-express
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ENABLE_ADMIN=true
- ME_CONFIG_MONGODB_ADMINUSERNAME=root
- ME_CONFIG_MONGODB_ADMINPASSWORD=pass12345
- ME_CONFIG_BASICAUTH_USERNAME=admin
- ME_CONFIG_BASICAUTH_PASSWORD=admin123
volumes:
- mongodb-data
depends_on:
- mongodb
networks:
- mongodb_network
ports:
- 8081:8081
healthcheck:
test: wget --quiet --tries=3 --spider http://admin:[email protected]:8081 || exit 1
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
volumes:
mongodb-data:
name: mongodb-data
networks:
mongodb_network:
name: mongodb_network

Ahora, desglosemos el archivo Compose mencionado arriba. Primero, hemos creado dos servicios:

  • mongodb
  • Mongo-Express

Servicio mongoDB Configuramos el nombre de usuario raíz y la contraseña del contenedor "mongoDB" usando las siguientes variables de entorno:

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD

Mapeamos el volumen de datos al volumen Docker de mongodb-data y definimos la red como mongodb_network, al abrir el puerto 27017. Servicio Mongo-Express Las variables de entorno del contenedor de Mongo-Express son:

  • ME_CONFIG_MONGODB_SERVER – Servicio MongoDB (mongodb)
  • ME_CONFIG_MONGODB_ENABLE_ADMIN – Permite acceso a todas las bases de datos como administrador
  • ME_CONFIG_MONGODB_ADMINUSERNAME – Nombre de usuario de administrador de la base de datos MongoDB
  • ME_CONFIG_MONGODB_ADMINPASSWORD – Contraseña de administrador de la base de datos MongoDB
  • ME_CONFIG_BASICAUTH_USERNAME – Usuario de acceso a la interfaz web de Mongo-Express
  • ME_CONFIG_BASICAUTH_PASSWORD – Contraseña de acceso a la interfaz web de Mongo-Express

Además, configuramos el servicio mongo-express para que dependiera del servicio mongoDB. Asignamos a la red el mismo mongodb_network y mapeamos los volúmenes al volumen mongodb-data. Expusimos el puerto 8081 para permitir el acceso a la interfaz web. Podemos supervisa ambos servicios usando comprobaciones de salud de Docker. El servicio mongodb enviará ping a la base de datos MongoDB, mientras que el servicio mongo-express intentará acceder a la página web usando las credenciales dadas. Finalmente, definimos un volumen llamado "mongodb-data" y una red llamada "mongodb_network" para el proyecto. Comienza el archivo Docker Compose.

    sudo docker-compose up -d
MongoDB Docker 9.1 - configuración avanzada de contenedores

La salida anterior no contiene errores, así que podemos asumir que todos los servicios son creados correctamente. Como hemos añadido comprobaciones de salud para ambos servicios, podemos verificar usando el comando ps de Docker.

    sudo docker ps -a
MongoDB Docker 9.2 - comando PS

El comando ps Docker imprime el estado de salud del contenedor. Este estado de salud solo están disponible si te has definido una comprobación de salud para el contenedor.

Monitorización con Mongo Express

Ahora, pasemos a la interfaz web de Mongo Express usando la IP del servidor (http://10.10.10.60:8081.)

MongoDB Docker 9.3 - Monitorización de Mongo Express

La interfaz Mongo Express ofrece una forma cómoda de interactuar con la base de datos MongoDB. La interfaz Mongo Express también ofrece una visión general del estado de la instancia del servidor MongoDB, proporcionando una funcionalidad sencilla de monitorización.

Conclusión

Creamos este tutorial de Docker MongoDB debido a la popularidad de MongoDB entre las bases de datos NoSQL y los beneficios te puede Lograr al usarlo en un contenedor Docker. Utilizar MongoDB en contenedores Docker crea entornos de desarrollo y producción consistentes para despliegues más fluidos. A diferencia de las máquinas virtuales, los contenedores Docker requieren menos recursos. Con un dominio de contenedores Docker simples y avanzados, tus procesos de desarrollo de software pueden ser mucho más eficientes y sin problemas.

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de ITOps y DevOps

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.