首先簡單介紹一下docker:
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實作虛拟化。容器是完全使用沙箱機制,互相之間不會有任何接口。
好處就是可以移植,不需要重複安裝,缺點需要消耗大量記憶體(可以忽略)。
其他不多說,馬上開始今天的主題内容:
第一步:查找docker中的mongo
docker search mongo
這個我們就拿官方的那個下載下傳
第二步:拉取鏡像
docker pull mongo:3.6
這裡安裝的是3.6版本,我們檢視一下是否已經下載下傳下來
docker images
第三步:運作mongo鏡像
docker run -p 27917:27017 -v e://db:/data/db -d mongo:3.6

-
說明
-p 27917:27017 :将容器的 27017 端口映射到主機的 27917 端口(端口可以自己定義)
-v e://db:/data/db :将主機中e盤目錄下的 db 挂載到容器的/data/db,作為 mongo 數 據存儲目錄
- 檢視容器啟動情況
docker ps
表明我們的mongo鏡像已經啟動成功
第四步:重命名容器對象
由于上面我們啟動時沒有指定名字,系統就自動生成一個随機的名字reverent_mestorf,為了友善記錄,我們需要重新命名成我們想要的名字
docker rename reverent_mestorf mongo3.6
第五步:進入admin資料庫
首先進入mongo容器,然後進入admin資料庫
winpty docker exec -it mongo3.6 bash
mongo admin
當然也可以簡寫成這樣
winpty docker exec -it mongo3.6 mongo admin
注:winpty 為window下的docker需要加的指令,linux是沒有的
第六步:建立賬戶
- 建立管理者賬号(擁有所有權限)
db.createUser({
user: 'root',
pwd: 'admin',
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});
表示建立成功
- 開啟驗證
db.auth("root","admin");
1 代表授權驗證成功
- 建立目标資料庫(實際上切換即可)
use huafeng_db
- 建立目标資料庫管理使用者
db.createUser({
user: 'huafeng',
pwd: 'huafeng123456',
roles: [ { role: "readWrite", db: "huafeng_db" } ]
});
db.auth("huafeng","huafeng123456");
現在我們使用圖形化界面工具連接配接一下我們剛建立的資料庫,看看是否成功
本人使用 Robo 3T 工具
- 打開軟體 點選左上角 建立一個連接配接配置,如圖 位址寫剛才docker對應的ip位址 端口号填寫剛才配置的,點選Test按鈕 如圖提示,表明可連接配接mongo成功
-
如圖 點選Authentication頁籤進行使用者名與密碼校驗
輸入資料庫名字,使用者名,密碼 以及驗證方式為MONGODB-CR,點選Test按鈕,提示驗證失敗
當我們把驗證方式改為SCRAM-SHA-1時,卻可以如圖驗證成功
說明:程式開發使用的都是MONGODB-CR(直連)方式驗證
- 通過檢視mongo官方文檔發現,原來新版的mongodb(3.0以後)加入了SCRAM-SHA-1校驗方式,需要第三方工具配合進行驗證,預設的currentVersion 值為5,若需要MONGODB-CR 驗證則需要做以下操作
use admin;
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
如圖傳回結果則表明修改成功,否則失敗
這裡有個不好的操作就是,一定要先建立賬号之後才能修改驗證方式,然後删除原來的賬号再重新建立一遍
- 檢視剛才建立的使用者
use admin;
db.system.users.find()
如圖,你會發現,預設的登入校驗方式都是SCRAM-SHA-1
- 對剛才建立的huafeng這個賬号進行删除,然後重新建立
db.system.users.remove({user:"huafeng"})
- 再次檢視使用者資訊
use admin;
db.system.users.find()
如上圖所示,使用者登入方式已經改變成MONGODB-CR,這時,我們使用Robo 3T重新連接配接一下
這時已經連接配接成功,整個安裝過程就此結束
拓展
- 本地連接配接遠端mongo資料庫
winpty docker exec -it mongo3.6 mongo -u 使用者名 -p 密碼 host:port/資料庫名稱
- 備份遠端mongo資料庫到本地docker中
mongodump -h IP --port 端口 -u 使用者名 -p 密碼 -d 資料庫 -o 檔案存在路徑
如:
winpty docker exec -it mongo3.6 mongodump -h 192.168.3.185
--port 27917 -u huafeng -p huafeng123456 -d huafneg_db -o /data/db
注: 上面是一行代碼,文章排版問題。本地備份IP可以不填,如果是預設端口也可以不填(安全問題,端口一般是要改變的)
- docker把容器中的mongo導出成鏡像檔案
docker export [CONTAINER ID] > 檔案名.tar
- docker導入鏡像
docker load < 檔案名.tar
注: 測試發現,window下導出的鏡像檔案不能導入成功(暫時沒去研究是什麼問題導緻)