docker之安裝和管理mongodb


前言

折騰一些使用docker來配置和管理mongodb和mongodb集群。

安裝mongodb

從docker網站拉取mongodb鏡像

docker search mongo
# 選擇一個版本
docker pull mongo:3.4
# 查看拉取的版本
docker images

配置相關參數

  • 宿主機創建mongo文件夾
cd /mnt/
mkdir mongodb
cd ./mongodb
mkdir data # 放置數據文件
mkdir backup # 備份文件
mkdir conf # 配置文件
  • 創建mongodb配置文件
# mongodb.conf
logappend=true
# bind_ip=127.0.0.1
port=27017 
fork=true
noprealloc=true
auth=true

創建內部網絡

docker network create tms

創建容器

docker run --name mongodb -v /mnt/mongodb/data:/data/db -v /mnt/mongodb/backup:/data/backup -v /mnt/mongodb/conf:/data/configdb -p 27018:27017 --network tms --network-alias mongodb -d mongo --auth

# 容器命名mongodb,數據庫數據文件掛載到/mnt/mongodb/data,備份文件掛載到/mnt/mongodb/backup,啟動的配置文件目錄掛載到容器的/data/configdb,--auth開啟身份驗證。

# 如果想要使用配置文件啟動mongodb,則執行自己的啟動命令:

docker run --name mongodb -v /mnt/mongodb/data:/data/db -v /mnt/mongodb/backup:/data/backup -v /mnt/mongodb/conf:/data/configdb -p 27018:27017 --network tms --network-alias mongodb -d mongo mongod -f /data/configdb/mongodb.conf

記住:自己的mongod啟動命令是在容器內執行的,因此使用的配置文件路徑是相對於容器的內部路徑。

之所以要掛載數據卷是為了便於直接對數據庫數據進行讀取以及備份的方便,當然也可以不掛載,掛載的主要目的一般是為了掛載應用的啟動配置文件。

進入容器創建用戶

docker exec -it mongodb bash

use admin
db.createUser({ # 先創建root用戶
    user:'admin',
    pwd:'123456',
    roles:[{role:'root',db:'admin'}],
})

db.auth('admin','123456') # 認證

# 然后創建普通用戶

退出容器后我們可以嘗試在主機訪問容器里的mongodb,如果出現如下錯誤:

Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18, codeName: "AuthenticationFailed" }

可能的一個原因是mongo的客戶端版本太低,不支持認證操作,將mongo的客戶端升級后再次嘗試。

mongodb副本集

一個最小的副本集為3個成員,包括主節點,備節點和仲裁節點,如果沒有仲裁節點,備節點是不會自動升級為主節點的。

創建mongodb節點

# 創建一個網絡
docker network create tms

docker run --name m1 -p 27001:27017  --network tms --network-alias m1 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0
docker run --name m2 -p 27002:27017  --network tms --network-alias m2 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0
docker run --name m3 -p 27003:27017  --network tms --network-alias m3 -d mongo:3.4 --replSet mset --bind_ip 0.0.0.0

注意一定要將bind_ip設置成不是只有本地訪問,否則副本集不能初始化成功。

配置節點

rs.initiate({ _id:"mset", members:[
{_id:0,host:"m1:27017",priority:2}, {_id:1,host:"m2:27017",priority:1}, {_id:2,host:"m3:27017",arbiterOnly:true}
]})
priority:設置優先級,數字越大優先級越高,優先級最高的是主節點

rs.status() # 查看狀態

# 默認備份節點不能讀寫,可以設置
rs.slaveOk();

# 增加節點,需要進入主節點執行
rs.add('ip:port')

創建用戶

use admin
db.createUser({ 
    user:'admin',
    pwd:'123456',
    roles:[{role:'root',db:'admin'}],
})

db.auth('admin','123456') 

開啟認證

如果需要開啟認證,使用ssl的keyfile文件作為認證文件:

openssl rand -base64 666 > mongodb.key # 生成認證文件
chmod 600 mongodb.key # 設置執行權限
  • 設置配置文件
# /mnt/mongodb/mconf/mongod.conf
net:
  port: 27017
  bindIp: 0.0.0.0

systemLog:
  logAppend: true

processManagement:
  fork: false

security:
  keyFile: "/data/configdb/mongodb.key"
  clusterAuthMode: "keyFile"
  authorization: "enabled"

replication:
  replSetName: "mset"
  secondaryIndexPrefetch: "all"
  • 啟動容器
docker run --name m1 -p 27001:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m1 -d mongo:3.4 mongod -f /data/configdb/mongod.conf
docker run --name m2 -p 27002:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m2 -d mongo:3.4 mongod -f /data/configdb/mongod.conf
docker run --name m3 -p 27003:27017 -v /mnt/mongodb/mconf:/data/configdb --network tms --network-alias m3 -d mongo:3.4 mongod -f /data/configdb/mongod.conf

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM