这个完整的Docker Compose示例设置了一个包含持久数据的本地 MongoDB Atlas 群集。查看完整的Docker Compose文件和每个组件,以了解其用途和配置。要学习;了解更多信息,请参阅 使用Docker创建本地Atlas部署。
Docker Compose 文件
以下示例使用 mongodb/mongodb-atlas-local
映像创建本地Atlas 集群。该文件配置网络,安装正确的数据卷以播种数据库和持久化数据,以及Atlas Search索引。
1 services: 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 15 volumes: 16 db: 17 configdb: 18 mongot:
使用以下信息为本地Atlas 集群预配您自己的数据,并保留您的配置和数据。
文件结构
Docker Compose文件具有以下主要参数:
services
定义要运行的容器。在此示例中,由名为mongodb
的单个服务定义了MongoDB服务。您可能还需要其他服务才能运行完整的应用程序。volumes
定义了可以在容器之间股票的持久存储位置。此示例显示了MongoDB服务运行所需的持久存储位置。
服务配置
Image
image: mongodb/mongodb-atlas-local
必需
此参数定义本地MongoDB Atlas映像。此定义使用最新版本的映像,相当于使用 :latest
标签。如果您的组织要求您使用特定的映像构建,您可以附加@sha256:<digest>
。如果要使用具有最新操作系统更新的特定版本的MongoDB ,请使用版本号标签。示例,mongodb/mongodb-atlas-local:8.0.6
主机名
hostname: mongodb
必需
此参数定义容器的主机名。必须正确指定此项,本地副本集才能正常运行。需要此参数以确保同一Docker容器网络中的不同服务之间的通信。您可以通过相同的主机名 mongodb
引用此容器。
环境设置
身份验证
environment: - MONGODB_INITDB_ROOT_USERNAME=user - MONGODB_INITDB_ROOT_PASSWORD=pass
推荐
突出显示的 environment
参数为本地Atlas 集群设立初始 root用户名和密码。为简单起见,在本示例中,凭证是在Docker Compose文件本身中定义的,但您可以将凭证抽象到环境变量中。
日志记录
environment: - MONGODB_INITDB_ROOT_USERNAME=user - MONGODB_INITDB_ROOT_PASSWORD=pass - MONGOT_LOG_FILE=/dev/stderr - RUNNER_LOG_FILE=/dev/stderr
Optional
突出显示的 environment
参数定义日志记录以帮助诊断任何问题。 mongot
(提供Atlas Search功能)生成 MONGOT_LOG_FILE
。此示例将 mongot
日志输出到 stderr
目录。运行器服务会生成 RUNNER_LOG_FILE
。运行器服务监控创建 mongod
的进程并配置与 mongot
的集成。此示例将运行程序日志输出到 stderr
目录。
卷
跨容器重启的卷可持久保存数据和配置。
初始化
volumes: - ./init:/docker-entrypoint-initdb.d
可选的
突出显示的 volumes
参数将本地 init
目录挂载到容器的初始化目录。通常,init
目录位于项目中,当您运行docker-compose up
时,该进程会在此目录中搜索所有初始化脚本。支持的文件类型包括:
.js
MongoDB Shell脚本.sh
Bash 脚本
示例,将以下脚本放入 init
文件夹时:
该脚本检索示例示例数据集。
确认下载的数据集。
mongorestore
使用本地MongoDB Atlas容器映像提供的 将存档恢复到新的本地Atlas 集群。确认已加载的数据。
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."
注意
连接字符串
由于在种子进程中构建连接字符串可能具有挑战性,尤其是在本地计算机和Docker网络之间切换时,因此在种子进程中会自动提供 $CONNECTION_STRING
环境变量。
数据
volumes: - ./init:/docker-entrypoint-initdb.d - db:/data/db - configdb:/data/configdb - mongot:/data/mongot volumes: db: configdb: mongot:
可选的
MongoDB默认将其数据存储在 /data/db
目录中。在此Docker Compose文件中,/data/db
目录会映射到MongoDB服务的 db
卷。 Docker Compose文件末尾的 volumes
参数声明其他服务可以使用的卷,包括 mongodb 服务中映射的 db
卷。 db
卷充当容器外部的存储位置,在容器重启时保留数据。
配置
volumes: - ./init:/docker-entrypoint-initdb.d - db:/data/db - configdb:/data/configdb - mongot:/data/mongot volumes: db: configdb: mongot:
可选的
默认下, MongoDB将其配置数据存储在 /data/configdb
目录中,该目录以与存储的数据相同的方式持久化。
Atlas Search ()mongot
volumes: - ./init:/docker-entrypoint-initdb.d - db:/data/db - configdb:/data/configdb - mongot:/data/mongot volumes: db: configdb: mongot:
可选的
本地MongoDB Atlas映像 ()mongodb/mongodb-atlas-local
附带mongot
,它提供Atlas Search和Atlas Vector Search功能。默认下,mongot
将索引存储在/data/mongot
目录中。该卷被映射、挂载,其数据在运行中持续存在,其方式与配置和存储的数据相同。
验证进程是否正常
本地Atlas实施简化了MongoDB进程()mongod
和搜索功能 ()mongot)
的配置。在初始化期间,这些进程必须启动并重新启动。在某些情况下,容器可能正在运行,但您需要的进程尚未准备就绪本地MongoDB Atlas映像还提供运行状况检查。
您可以使用运行状况检查来确保MongoDB和搜索功能进程以及任何初始化脚本均已完全准备就绪。
在脚本中,包含以下代码:
timeout 120 bash -c 'until [ "$(docker inspect --format='\''{{.State.Health.Status}}'\''<container-name>)" = "healthy" ]; do sleep 2; done'
使用Docker Compose 时还可以执行运行状况检查。
使用Docker Compose
要启动该服务,运行以下命令:
docker-compose up
您可以附加 -d
以在分离模式下运行该服务。
要停止该服务,运行以下命令:
docker-compose down
您可以附加 -v
来删除卷并清除数据。如果您不想保留数据或配置更改,或者想确保从全新容器中重新启动,请使用此选项。
要验证运行docker-compose up
时服务是否正常,请添加 condition: service_healthy
参数:
api: depends_on: atlas_local: condition: service_healthy
反馈
要讨论本地Atlas集群,请参阅MongoDB开发者社区论坛。要获取帮助、提供反馈或请求功能,请参阅MongoDB反馈引擎。