Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
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 Atlas local 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 ejecutarán. En este ejemplo, un solo servicio llamado mongodb define el servicio MongoDB. Es posible que se requieran otros servicios para que la aplicación funcione correctamente.

  • 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 destacados definen el registro para ayudar a diagnosticar cualquier problema. mongot, que proporciona las capacidades de búsqueda de Atlas, genera el MONGOT_LOG_FILE. Este ejemplo genera los registros mongot 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 emite los registros del runner en el 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 coloca 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 del servicio MongoDB. Los parámetros volumes al final del archivo de Docker Compose indican los volúmenes que otros servicios pueden usar, incluido el volumen db asignado al servicio MongoDB. El volumen db actúa como una ubicación de almacenamiento fuera del contenedor, preservando los datos tras 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 Atlas Search y Atlas Vector Search. Por defecto, mongot almacena los índices en el directorio /data/mongot. Este volumen está mapeado, montado y sus datos persisten en las 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 MongoDBmongod () y las capacidades de búsquedamongot) (. Durante la inicialización, estos procesos deben iniciarse y reiniciarse. En algunos casos, el contenedor puede estar ejecutándose, pero el proceso que necesita no está listo. La imagen local de MongoDB Atlas también proporciona una verificación de estado.

Puede utilizar la comprobación de estado para asegurarse de que los procesos de MongoDB y de capacidad de búsqueda, así como también cualquier script de inicialización, estén completamente listos.

En sus 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 hacer una comprobación del estado cuando utilizas 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á en buen estado cuando ejecuta docker-compose up, agregue 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