通过 docker-compose 创建 MongoDB 的副本集
做好準備
为了在Docker上运行,创建一个目录。
mkdir -p primary/data/db
mkdir -p secondary/data/db
接下来,我们将创建一个初始化脚本。
mkdir init
touch init/init.js
rs.initiate({
_id: 'rs0',
members: [
{
_id: 0,
host: "mongodb-primary:27017",
priority: 100
},
{
_id: 1,
host: "mongodb-secondary:27017",
priority: 10
},
{
_id: 2,
host: "mongodb-arbiter:27017",
arbiterOnly: true
}
],
});
通过设置优先级,您可以始终将指定的容器设为主要容器。
编写docker-compose.yaml文件
为了避免与主机上的mongod发生冲突,将端口设置为27018,并将mongod的参数放入services.[name].command中。请根据需要进行适当调整。
version: '3'
services:
mongodb-primary:
image: mongo:4.4
command:
- --replSet
- rs0
volumes:
- ./primary/data/db:/data/db
- ./init:/docker-entrypoint-initdb.d:ro
expose:
- 27017
ports:
- 27018:27017
restart: always
mongodb-secondary:
image: mongo:4.4
command:
- --replSet
- rs0
volumes:
- ./secondary/data/db:/data/db
expose:
- 27017
restart: always
mongodb-arbiter:
image: mongo:4.4
command:
- --replSet
- rs0
expose:
- 27017
restart: always
启动
docker-compose up -d