Docs Menu
Docs Home
/ /

Ejemplo de Docker Compose

Este ejemplo completo de Docker Compose configura un entorno local MongoDB Atlas clúster con datos persistentes. Revisar el archivo completo de Docker Compose, y cada componente, para comprender su propósito y configuración. Para obtener más información, consulte Crea una implementación local de Atlas con Docker.

El siguiente ejemplo crea un clúster local de Atlas utilizando el mongodb/mongodb-atlas-local imagen. El archivo configura la red, monta los volúmenes de datos correctos para semillas de base de datos y retención de datos, y los índices de búsqueda de Atlas.

1services:
2 mongodb:
3 image: mongodb/mongodb-atlas-local
4 hostname: mongodb
5 environment:
6 - MONGODB_INITDB_ROOT_USERNAME=user
7 - MONGODB_INITDB_ROOT_PASSWORD=pass
8 ports:
9 - 27017:27017
10 volumes:
11 - ./init:/docker-entrypoint-initdb.d
12 - db:/data/db
13 - configdb:/data/configdb
14 - mongot:/data/mongot
15volumes:
16 db:
17 configdb:
18 mongot:

Utiliza la siguiente información para aprovisionar tu clúster local de Atlas con tus propios datos, y preservar tu configuración y tus datos.

El archivo Docker Compose tiene los siguientes parámetros principales:

  • services define los contenedores que se deben ejecutar. En este ejemplo, un único servicio denominado mongodb define el servicio MongoDB. Es posible que necesite otros servicios para que su aplicación completa pueda ejecutarse.

  • volumes define los ubicaciones de almacenamiento persistente que puedes compartir entre contenedores. Este ejemplo muestra las ubicaciones de almacenamiento persistente requeridas para que el servicio de MongoDB funcione.

image: mongodb/mongodb-atlas-local

Requerido

Este parámetro define la imagen local de MongoDB Atlas. Esta definición utiliza la versión más reciente de la imagen y es equivalente a usar la etiqueta :latest. Si tu organización requiere que uses una versión específica de imagen, puedes añadir @sha256:<digest>. Si desea utilizar una versión específica de MongoDB con las actualizaciones más recientes del sistema operativo, utilice las etiquetas del número de versión. Por ejemplo, mongodb/mongodb-atlas-local:8.0.6

hostname: mongodb

Requerido

Este parámetro define el nombre de host para el contenedor. Debes especificarlo correctamente para que el set de réplicas local funcione. Este parámetro es necesario para garantizar la comunicación entre los diferentes servicios dentro de la misma red de contenedores Docker. Se puede referir a este contenedor por el mismo nombre de host, mongodb.

environment:
- MONGODB_INITDB_ROOT_USERNAME=user
- MONGODB_INITDB_ROOT_PASSWORD=pass

Recomendado

Los parámetros destacados de environment establecen el nombre de usuario y la contraseña raíz inicial para el clúster local de Atlas. Para simplificar, en este ejemplo, las credenciales se definen en el propio archivo Docker Compose, pero puedes abstraer las credenciales en una variable de entorno.

environment:
- MONGODB_INITDB_ROOT_USERNAME=user
- MONGODB_INITDB_ROOT_PASSWORD=pass
- MONGOT_LOG_FILE=/dev/stderr
- RUNNER_LOG_FILE=/dev/stderr

Opcional

Los parámetros environment resaltados definen el registro para ayudar a diagnosticar cualquier problema. mongot, que proporciona las capacidades de MongoDB Search, genera el MONGOT_LOG_FILE. Este ejemplo genera los mongot registros en el directorio stderr. El servicio runner genera el RUNNER_LOG_FILE. El servicio runner supervisa el proceso que crea mongod y configura la integración con mongot. Este ejemplo envía los registros del runner al directorio stderr.

Los volúmenes mantienen los datos y la configuración a través de los reinicios de los contenedores.

volumes:
- ./init:/docker-entrypoint-initdb.d

Condicional

El parámetro resaltado volumes monta el directorio local init al directorio de inicialización del contenedor. Normalmente, el directorio init se encuentra en el proyecto; al ejecutar docker-compose up, el proceso busca cualquier script de inicialización en dicho directorio. Los tipos de archivo admitidos incluyen:

  • .js scripts de shell de MongoDB

  • .sh scripts Bash

Por ejemplo, cuando colocas el siguiente script en la carpeta init:

  1. El script recupera un ejemplo de conjunto de datos de muestra.

  2. Confirma el conjunto de datos descargado.

  3. Utiliza mongorestore, que la imagen contenedora local de MongoDB Atlas proporciona, para restaurar el fichero en el nuevo clúster local de Atlas.

  4. Confirma los datos cargados.

# init/init.sh
#!/bin/bash
curl -O https://atlas-education.s3.amazonaws.com/sampledata.archive
echo "Sample data downloaded."
mongorestore --uri "$CONNECTION_STRING" --archive=./sampledata.archive
echo "Sample data loaded successfully."

Nota

Cadena de conexión

Dado que construir su cadena de conexión durante el proceso de siembra puede ser un desafío, especialmente cuando cambia entre su máquina local y la red Docker, la variable de entorno $CONNECTION_STRING se proporciona automáticamente durante el proceso de siembra.

volumes:
- ./init:/docker-entrypoint-initdb.d
- db:/data/db
- configdb:/data/configdb
- mongot:/data/mongot
volumes:
db:
configdb:
mongot:

Condicional

MongoDB almacena sus datos en el directorio /data/db de forma predeterminada. En este archivo de Docker Compose, el directorio /data/db se asigna al volumen db para el servicio MongoDB. Los parámetros volumes al final del archivo Docker Compose declaran los volúmenes que otros servicios pueden usar, incluido el volumen db mapeado en el servicio mongodb. El db volumen actúa como una ubicación de almacenamiento fuera del contenedor, preservando los datos a través de los reinicios del contenedor.

volumes:
- ./init:/docker-entrypoint-initdb.d
- db:/data/db
- configdb:/data/configdb
- mongot:/data/mongot
volumes:
db:
configdb:
mongot:

Condicional

Por defecto, MongoDB almacena sus datos de configuración en el directorio /data/configdb, que se mantiene de la misma manera que los datos almacenados.

volumes:
- ./init:/docker-entrypoint-initdb.d
- db:/data/db
- configdb:/data/configdb
- mongot:/data/mongot
volumes:
db:
configdb:
mongot:

Condicional

La imagen local de MongoDB Atlas (mongodb/mongodb-atlas-local) viene con mongot, que proporciona las capacidades de MongoDB Search y MongoDB Vector Search. Por defecto, mongot almacena índices en el directorio /data/mongot. Este volumen está mapeado, montado y sus datos persisten entre ejecuciones de la misma manera que la configuración y los datos almacenados.

La implementación local de Atlas simplifica la configuración del proceso de MongoDB (mongod), y las capacidades de búsqueda (mongot). Durante la inicialización, estos procesos deben iniciarse y reiniciarse. En algunos casos, el contenedor puede estar en ejecución, pero el proceso que se necesita no está listo. La imagen local de MongoDB Atlas también proporciona una verificación de estado.

Puedes usar la verificación de estado para asegurarte de que los procesos de MongoDB y de la capacidad de Búsqueda, así como cualquier script de inicialización, estén completamente listos.

En tus scripts, incluya el siguiente código:

timeout 120 bash -c 'until [ "$(docker inspect --format='\''{{.State.Health.Status}}'\''<container-name>)" = "healthy" ]; do sleep 2; done'

También puedes realizar una verificación de estado cuando utilices Docker Compose.

Para iniciar el servicio, ejecuta el siguiente comando:

docker-compose up

Puede agregar -d para ejecutar el servicio en modo separado.

Para detener el servicio, ejecuta el siguiente comando:

docker-compose down

Puede agregar -v para remover los volúmenes y borrar los datos. Utiliza esta opción si no quieres mantener los datos o los cambios de configuración, o si quieres asegurarte de que estás reiniciando desde un contenedor nuevo.

Para verificar si el servicio está saludable cuando ejecutas docker-compose up, agrega el parámetro condition: service_healthy:

api:
depends_on:
atlas_local:
condition: service_healthy

Para saber más, consulta Crear una implementación local de Atlas con Docker.

Para discutir clústeres locales de Atlas, consulta el foro MongoDB Developer Community. Para obtener ayuda, proporcionar comentarios o solicitar funcionalidades, consulta el MongoDB Feedback motor.

Volver

Implementar con Docker

En esta página