文章目錄
Docker Compose 建立 MongoDB Replica Set
因為之前筆記 MongoDB Cli Replica Set 連線方式 需要建立測試環境,想起最早之前的筆記 使用 docker 建立 MongoDB Replica Set 但使用起來並不是很好用,所以興起筆記其他建立 MongoDB Replica Set 方式的念頭
基本環境說明
- macOS Catalina 10.15.4
- docker desktop community 2.2.0.5(43884)
- MongoDB 4.2.6
使用方式
docker-compose.yml
將三個 mongo instance 完整分開,以利於 host 機器的 port mapping
mongod 啟動指令中設定
--port
即可透過 docker-compose 的
healthcheck
功能來設定 MongoDB Replica Setversion: "3.7" services: mongo1: container_name: mongo1 image: mongo ports: - 27017:27017 restart: always entrypoint: [ "mongod","--port","27017", "--bind_ip_all", "--replSet", "rs0" ] mongo2: container_name: mongo2 image: mongo ports: - 27027:27027 restart: always entrypoint: [ "mongod","--port","27027", "--bind_ip_all", "--replSet", "rs0" ] mongo3: container_name: mongo3 image: mongo ports: - 27037:27037 restart: always entrypoint: [ "mongod","--port","27037", "--bind_ip_all", "--replSet", "rs0" ] healthcheck: test: ["CMD","mongo","--host","mongo1","--port","27017", "--eval", 'rs.initiate( { _id : "rs0",members: [{ _id: 0, host: "mongo1:27017" },{ _id: 1, host: "mongo2:27027" },{ _id: 2, host: "mongo3:27037" } ]})'] interval: 15s timeout: 10s retries: 3 start_period: 10s
設定 hosts
mongo 內部只認得設定 Replica Set 的 member host,但 host 機器不認得 container name
sudo echo "127.0.0.1 mongo1\n127.0.0.1 mongo2\n127.0.0.1 mongo3" >> /etc/hosts
啟動 MongoDB Replica Set
執行指令後需要等個幾十秒才會設定完成
docker-compose up -d
心得
跟之前 使用 docker 建立 MongoDB Replica Set 相比,少了一個 creator
的 dockerfile 需要維護 (之前多一個 creator
是因為 mongo 啟動當下無法立即接受連線,而我嘗試 sleep 也失敗,不得已才多一個 container 來暫解),整體說來更為簡潔,也因為將各個 instance 完整切開,所以從外部的連線也可以正常運作
source code 請參考 yowko/docker-compose-create-mongodb-replica-set
參考資訊
文章作者 Yowko Tsai
上次更新 2020-12-11
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。