Docker Compose创建MongoDB副本集
在这篇文章中,我将指导一名刚入行的开发者如何使用Docker Compose来创建一个MongoDB副本集。以下是整个过程的步骤:
步骤 | 描述 |
---|---|
1 | 创建Docker Compose文件 |
2 | 定义MongoDB服务 |
3 | 配置副本集 |
4 | 构建和启动容器 |
接下来,我将逐步说明每个步骤需要做什么,并提供相关的代码和注释。
1. 创建Docker Compose文件
首先,创建一个名为docker-compose.yml
的文件,并在文件中定义服务。在这个文件中,我们将定义一个名为mongodb
的服务。
version: '3'
services:
mongodb:
image: mongo:latest
ports:
- 27017:27017
volumes:
- /data/db:/data/db
command: --replSet rs0
在上述代码中,我们使用了mongo:latest
镜像来作为MongoDB服务的基础镜像。我们将容器内的27017端口映射到宿主机的27017端口。此外,我们还将宿主机的/data/db
目录挂载到容器的/data/db
目录,以便持久化数据。最后,我们使用了--replSet rs0
参数来启动MongoDB副本集。
2. 定义MongoDB服务
接下来,我们需要定义MongoDB服务的配置。为了实现这一点,我们需要在docker-compose.yml
文件中添加以下内容:
services:
mongodb:
...
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=secret
...
上述代码中,我们通过environment
字段来设置MongoDB服务的环境变量。在这里,我们设置了MONGO_INITDB_ROOT_USERNAME
和MONGO_INITDB_ROOT_PASSWORD
环境变量,并分别将其设置为admin
和secret
。这些环境变量将用于设置MongoDB的管理员用户名和密码。
3. 配置副本集
为了创建一个MongoDB副本集,我们需要执行一些额外的配置。我们将在docker-compose.yml
文件中添加以下内容:
services:
mongodb:
...
command: mongod --replSet rs0
...
在上述代码中,我们使用command
字段来设置MongoDB容器运行时的命令。在这里,我们使用mongod --replSet rs0
命令来启动MongoDB容器,并指定副本集的名称为rs0
。
4. 构建和启动容器
最后,我们可以使用Docker Compose来构建和启动MongoDB容器。在命令行中,切换到包含docker-compose.yml
文件的目录,并运行以下命令:
docker-compose up -d
上述命令将根据docker-compose.yml
文件的定义,构建并启动MongoDB容器。-d
参数将容器以后台模式运行。
至此,我们已经成功地创建了一个MongoDB副本集。你可以使用以下命令来验证副本集是否已经成功创建:
docker-compose logs -f
上述命令将查看MongoDB容器的日志输出。在输出中,你应该能够看到以下信息:
...
{"t":{"$date":"2022-01-01T00:00:00.000+00:00"},"s":"I", "c":"STORAGE", "id":22262,"ctx":"initandlisten","msg":"MongoDB starting","attr":{"pid":1,"port":27017,"dbPath":"/data/db","architecture":"64-bit","host":"mongo"}}
{"t":{"$date":"2022-01-01T00:00:00.000+00:00"},"s":"I", "c":"CONTROL", "id":20536,"ctx":"initandlisten","msg":"***** SERVER RESTARTED *****"}
{"t":{"$date":"2022-01-01T00:00:00.000+00:00"},"s":"I", "c":"CONTROL", "id":20573,"ctx":"initandlisten","msg":"** WARNING: Access control is not enabled for the database."}
...
{"
标签:容器,00,compose,mongo,MongoDB,副本,docker
From: https://blog.51cto.com/u_16175472/6774182