Docker ComposeでMongoDBのReplica Setを使う

Docker ComposeでMongoDBのReplica Setを試したときのメモ。

準備

docker-compose.yml

version: '3'
services:
  mongo01:
    image: mongo:4.4
    command: mongod --replSet rs1 --bind_ip_all
    ports:
      - "27017:27017"
  mongo02:
    image: mongo:4.4
    command: mongod --replSet rs1 --bind_ip_all
    ports:
      - "27018:27017"
  mongo03:
    image: mongo:4.4
    command: mongod --replSet rs1 --bind_ip_all
    ports:
      - "27019:27017"

手順

ホスト(Mac)の/etc/hostsに以下を登録する。

127.0.0.1 mongo01 mongo02 mongo03

Docker ComposeでMongoDBを起動する。

% docker-compose up -d

Replica Setを設定する。

% mongo --port 27017

> rs.initiate({
  _id: "rs1",
  members: [
    {_id: 0, host: "mongo01:27017"},
    {_id: 1, host: "mongo02:27017"},
    {_id: 2, host: "mongo03:27017"}
  ]
})

動作確認

% mongo --host rs1/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019/?compressors=disabled&gssapiServiceName=mongodb&replicaSet=rs1

参考