1. 部署Mongodb
1.1 獲取docker鏡像
docker pull mongo
1.2 創建mongodb容器
docker run --name my-mongo -p 27017:27017 -d mongo --auth
如果加需要驗證就加--auth,不需要驗證,就去掉。默認mongodb是不使用用戶認證
1.3 進入容器設置用戶
docker exec -it 容器id /bin/bash mongo use admin db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //創建用戶,此用戶創建成功,則后續操作都需要用戶認證 exit
或者直接進入admin
docker exec -it ly-mongo mongo admin
db.createUser({user:"root",pwd:"root",roles:[{role:'root',db:'admin'}]}) //創建用戶,此用戶創建成功,則后續操作都需要用戶認證 exit
1.4 測試
mongo 宿主機ip/admin -utest -p
查看是否連接成功
2.維護mongoDB
2.1 指定MongoDB配置文件
當我們需要修改配置文件時,我們只需要在宿主機上創建一個mongodb.conf文件,並將該文件所在的文件夾映射到容器的/data/configdb文件夾中,同時,在容器的啟動命令中添加--configsvr參數即可。
docker run --name some-mongo -d mongo --configsvr
2.2 數據持久化
在使用MongoDB的容器時,數據持久化有很多種方式,下面我們將描述一種推薦的方式:
-
在宿主機上創建一個數據存儲目錄,並將其映射到容器中的目錄中。
這將數據庫文件放在主機系統中的已知位置,並便於主機系統上的工具和應用程序訪問文件。
缺點是用戶需要確保目錄存在,例如,主機系統上的目錄權限和其他安全機制配置正確。
使用方法如下:在宿主機中創建一個目錄,例如/my/own/datadir。
如下命令啟動容器:
docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo:tag
2.3 數據庫授權
默認情況下,Mongo數據庫沒有添加認證約束,也就是說任何人只要知道數據庫服務的地址和端口,就可以正常訪問數據庫並對數據庫進行增刪改查。
為了增強數據庫的安全性,我們需要對數據庫添加授權認證。
添加方式如下:
在啟動數據庫容器命令中添加--auth參數。
docker run --name some-mongo -d mongo --auth
使用exec命令進入命令行,並添加用戶名和密碼。
docker exec -it some-mongo mongo admin db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
2.4 數據庫備份
通常情況下,我們需要對數據庫進行備份。
首先,我們需要將本地磁盤的某個文件夾映射到容器中的備份文件夾中:
docker run --name mongo -v /mnt/mongo/backup:/data/backup -d mongo
數據庫備份的方式如下:
docker exec mongo sh -c 'exec var=`date +%Y%m%d%H%M` && mongodump -h localhost --port 27017 -u test -p test1 -d dbname -o /data/backup/$var_test1.dat'
3.實際使用步驟(推薦用法)
執行如下命令拉取Mongo鏡像:
docker pull mongo
創建Mongo專用的文件夾:
cd /opt
mkdir mongodb
cd ./mongodb
mkdir data
mkdir backup
執行如下命令啟動MongoDB:
docker run --name mongo -p 27017:27017 -v /opt/mongodb/data:/data/db -v /opt/mongodb/backup:/data/backup -d mongo --auth
接下來,我們需要進入容器的命令行去創建用戶名和密碼:
docker exec -it mongo mongo admin db.createUser({ user: 'admin', pwd: 'admin123456', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
db.auth("admin","admin123456"); use test; db.createUser({user:"test",pwd:"123456",roles:["readWrite"]}); db.auth("test","123456")
在運行一段時間以后,我們可以執行如下命令進行數據庫備份:
docker exec mongo sh -c 'exec var=`date +%Y%m%d%H%M` && mongodump -h localhost --port 27017 -u jsmith -p password -d dbname -o /data/backup/$var_test1.dat'