1. 程式人生 > 實用技巧 >Docker部署安裝MongoDB

Docker部署安裝MongoDB

DOCKER部署安裝MONGODB

下載映象

docker pull registry.docker-cn.com/library/mongo

建立本地資料資料夾

mkdir /data/mongodb0

啟動MongoDB容器

docker run --name mongodb-server0 -v /data/mongodb0:/data/db -p 27017:27017 -d 映象ID --auth

-v後面的引數表示把資料檔案掛載到宿主機的路徑
-p把mongo埠對映到宿主機的指定埠
--auth表示連線mongodb需要授權

為MongoDB新增管理員使用者

進入MongoDB控制檯
docker exec -it some-mongo mongo admin

新增使用者命令

db.createUser({ user: '1iURI', pwd: 'rootroot', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

MongoDB使用者許可權

內建的角色

資料庫使用者角色:read、readWrite;
資料庫管理角色:dbAdmin、dbOwner、userAdmin;
叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
備份恢復角色:backup、restore;
所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超級使用者角色:root // 這裡還有幾個角色間接或直接提供了系統超級使用者的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
內部角色:__system

角色說明:

Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級賬號,超級許可權

副本集形式部署

如果你想單點連線,那麼從這裡往下不需要看了,如果你想搭建MongoDB副本集,那麼請移除MongoDB的所有docker容器,重新按照下面的方式啟動容器和設定

0. 建立用於Auth的Keyfile

mkdir -p /data/mongodb0_conf
cd /data/mongodb0_conf
openssl rand -base64 741 > mongodb-keyfile
chmod 600 mongodb-keyfile
chown 999 mongodb_keyfile

1. 啟動三個Mongodb程序

docker run --name mongodb-server0 \
--restart always \
-v /data/mongodb0:/data/db \
-v /data/mongodb0_conf:/opt/keyfile \
-p 27017:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet exuehui-mongo-set

docker run --name mongodb-server1 \
--restart always \
-v /data/mongodb1:/data/db \
-v /data/mongodb1_conf:/opt/keyfile \
-p 27018:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet exuehui-mongo-set

docker run --name mongodb-server0 \
--restart always \
-v /data/mongodb0:/data/db \
-v /data/mongodb0_conf:/opt/keyfile \
-p 37017:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--replSet exuehui-mongo-set

2 進入 Mongodb Docker

docker run -it --name mongo-client mongo /bin/bash

3 進入要作為Master資料庫的 Mongodb Shell

mongo 192.168.31.206:27017/admin

4 初始化副本集, _id和啟動時設定的ReplSet引數相同

rs.initiate({ _id:"exuehui-mongo-set", members:[
{_id:0,host:"home.lemonsoft.vip:27017"}, {_id:1,host:"home.lemonsoft.vip:27018"}, {_id:2,host:"home.lemonsoft.vip:37017"}
]})

5 檢視副本集狀態

rs.status()

6.建立許可權使用者

use admin;
db.createUser({ user: '1iURI', pwd: 'rootroot', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });

use exuehui
db.createUser({ user: '1iURI-exuehui', pwd: 'rootroot', roles: [ { role: "readWrite", db: "exuehui" } ] });

7. 重新執行容器,並新增--Auth

docker run --name mongodb-server0 \
--restart always \
-v /data/mongodb0:/data/db \
-v /data/mongodb0_conf:/opt/keyfile \
-p 27017:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--auth \
--replSet exuehui-mongo-set

docker run --name mongodb-server1 \
--restart always \
-v /data/mongodb1:/data/db \
-v /data/mongodb1_conf:/opt/keyfile \
-p 27018:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--auth \
--replSet exuehui-mongo-set

docker run --name mongodb-server0 \
--restart always \
-v /data/mongodb0:/data/db \
-v /data/mongodb0_conf:/opt/keyfile \
-p 37017:27017 \
-d d22 \
--smallfiles \
--keyFile /opt/keyfile/mongodb-keyfile \
--auth \
--replSet exuehui-mongo-set