文章目錄
使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set (Single Node)
之前在筆記 Docker Compose 建立 MongoDB Replica Set 紀錄到使用 Docker Compose 建立 MongoDB Replica Set,不過當時建立的 MongoDB Replica Set 主要目的是為了驗證資料同步以及讀寫分離的功能並沒有加上 auth 相關機制
雖說 docker compose 建立的 MongoDB Replica Set 本來就只適合用在開發測試階段,對於安全性要求不那麼講究,只是沒有 auth 機制也就表示 auth 功能沒驗證到,難保實際上線後 auth 機制才出現問題,所以趁著假日空閒時間試試做法
基本環境說明
- macOS Catalina 10.15.5
- docker desktop community 2.3.0.3(45519)
docker images
- mongo:4.2.8-bionic
建立方式
docker-compose.yaml
version: "3.4" services: mongo1: container_name: mongo1 image: mongo:4.2.8-bionic environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=password ports: - 27017:27017 healthcheck: test: [ "CMD", "mongo", "admin", "-u", "root", "-p", "password", "--eval", 'rs.initiate( { _id : "rs0",members: [{ _id: 0,host: "mongo1:27017" }]}); db.getSiblingDB("admin").grantRolesToUser("root",[ "clusterAdmin" ]);', ] interval: 10s start_period: 15s command: ["--replSet", "rs0", "--bind_ip_all", "--auth"]
啟動 mongo
docker-compose up -d
實際使用
沒有提供 auth,無法取得 replica set 資訊
提供 auth 資訊,可以看到 replica set 只有一個 member
心得
完成程式碼請參考 yowko/docker-compose-mongodb-replica-set-with-auth-standalone
核心在於 docker-compose.yaml
,而其中的細部重點是
- 透過
enviroment
設定 mongodb 使用者與密碼 - mongod 啟動時加上
--auth
- 使用
healthcheck
來建立 replica set 與 grant user 權限
雖然筆記內容符合
Replica Set
- 有 auth 機制
但就我個人覺得還是差了點,畢竟 MongoDB 官方的 Replica Set 至少也要三個 nodes,所以這就列為改善項目
如果需要透過 docker compose 建立完整三個 nodes 且兼具 auth 功能的 MongoDB Replica Set 可以參考 使用 Docker Compose 建立有 Auth 的 MongoDB Replica Set
參考資訊
文章作者 Yowko Tsai
上次更新 2020-12-11
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。