通过 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
广告
将在 10 秒后关闭
bannerAds