天天看點

docker安裝mongodb

首先簡單介紹一下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
           
docker安裝mongodb
  • 說明

    -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下導出的鏡像檔案不能導入成功(暫時沒去研究是什麼問題導緻)