一. 什么是MongoDB
MongoDB是現(xiàn)在主流的分布式文檔數(shù)據(jù)庫(kù)爵政。一些字段不固定的數(shù)據(jù),使用傳統(tǒng)數(shù)據(jù)庫(kù)就不太好處理陶缺,要么要建很多表互相關(guān)聯(lián)钾挟,要么要建很多冗余字段。而MongoDB簡(jiǎn)直就是為此而生的饱岸。
MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔掺出,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成。MongoDB 文檔類似于 JSON 對(duì)象苫费。字段值可以包含其他文檔汤锨,數(shù)組及文檔數(shù)組。
二. 為什么用docker版的MongoDB
你可以在MongoDB的官方文檔里找到常規(guī)的安裝方式百框。本文主要面向懵懂的初學(xué)者闲礼,一切簡(jiǎn)單為主。這里給大家介紹下最簡(jiǎn)單的安裝方式,直接使用官方提供的docker鏡像柬泽。
三. 準(zhǔn)備工作
要使用docker鏡像慎菲,首先你得先安裝docker。對(duì)docker不熟悉的朋友可以參考我之前寫的一篇docker安裝和簡(jiǎn)單使用的教程聂抢。
四. 尋找官方鏡像
要找docker鏡像钧嘶,最常規(guī)的方式是直接到Docker Hub上來(lái)找。訪問(wèn)Docker Hub的網(wǎng)站琳疏,在左上角的搜索框里輸入mongo
并敲下回車有决。
在搜索結(jié)果中,就可以看到官方的鏡像空盼。注意书幕,有official
標(biāo)志的才是官方鏡像,這里不建議新手使用其他第三方提供的鏡像揽趾,本文后續(xù)的講解也是基于官方鏡像台汇。
點(diǎn)擊搜索結(jié)果官方鏡像右邊的DETAILS
,進(jìn)入鏡像詳細(xì)介紹頁(yè)面篱瞎。在右邊你可以找到下載鏡像的命令docker pull mongo
苟呐。
五. 開始安裝
找到了官方鏡像后,我們就可以開始安裝了俐筋。進(jìn)入安裝好了docker的linux服務(wù)器牵素,這里我們以之前教程介紹的阿里云centos7.3環(huán)境為例。
輸入命令澄者,下載mongo官方鏡像到服務(wù)器上笆呆。
docker pull mongo
耐心等待下載完成,輸入命令查看下載完成的鏡像
docker images
鏡像下載完成粱挡,下面就要開始啟動(dòng)容器了赠幕。啟動(dòng)容器前,建議大家仔細(xì)閱讀前面尋找鏡像時(shí)Docker Hub上關(guān)于mongo鏡像的詳細(xì)說(shuō)明询筏。
在鏡像文檔里榕堰,我們知道了該鏡像映射的端口號(hào)是27017
,配置文件的位置在/data/configdb
嫌套,數(shù)據(jù)庫(kù)文件的位置在/data/db
局冰。
我們輸入如下命令來(lái)啟動(dòng)容器。
docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo
命令執(zhí)行完后灌危,輸入命令docker ps -a
來(lái)查看所有的容器,可以看到mongo已經(jīng)成功啟動(dòng)碳胳。
現(xiàn)在我們使用Robo工具來(lái)嘗試連接勇蝙,在Address填上服務(wù)器的IP地址,端口號(hào)不用改挨约,就用默認(rèn)的27017味混〔ⅲ可以看到連接成功。
六. 開啟身份認(rèn)證
Docker版本的mongo默認(rèn)不需要身份認(rèn)證翁锡。剛才數(shù)據(jù)庫(kù)雖然啟動(dòng)成功了蔓挖,但是任何人知道ip地址端口號(hào)都可以登錄進(jìn)來(lái)。顯然這樣是不安全的馆衔。那如何打開身份認(rèn)證功能呢瘟判。
從Docker Hub上mongo鏡像的官方文檔里,我們可以找到答案角溃,需要在啟動(dòng)容器時(shí)加上--auth
命令拷获。
現(xiàn)在我們關(guān)閉并刪除掉剛才的容器,重新使用身份認(rèn)證模式啟動(dòng)一個(gè)容器减细。
docker stop mongo
docker rm mongo
docker run -d -p 27017:27017 -v mongo_configdb:/data/configdb -v mongo_db:/data/db --name mongo docker.io/mongo --auth
此時(shí)再通過(guò)Robo連接數(shù)據(jù)庫(kù)匆瓜,發(fā)現(xiàn)連接失敗。因?yàn)槲覀冮_啟了身份認(rèn)證模式未蝌,但還沒(méi)有創(chuàng)建用戶設(shè)置密碼驮吱。
輸入命令進(jìn)入容器內(nèi)部的mongo命令行
docker exec -it mongo mongo admin
在mongo命令行輸入命令創(chuàng)建管理員賬戶
db.createUser({ user: 'jsmith', pwd: 'some-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
創(chuàng)建好賬戶之后,我們?cè)賴L試使用Robo工具來(lái)連接萧吠,在Authentication欄目填寫上剛才創(chuàng)建的用戶名密碼左冬,即可連接成功。
七. 創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置用戶
目前為止我們一直都是在操作mongo自帶的admin庫(kù)怎憋。正常情況下是不建議直接使用這個(gè)庫(kù)的又碌。我們需要自己創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置新庫(kù)的用戶。
還是先使用docker exec -it mongo mongo admin
命令進(jìn)入mongo的命令行頁(yè)面绊袋。
使用上一步驟創(chuàng)建的管理員賬戶進(jìn)行授權(quán)
db.auth("jsmith","some-initial-password");
切換到test庫(kù)(如不存在會(huì)自動(dòng)創(chuàng)建)
use test
創(chuàng)建test庫(kù)下的用戶
db.createUser({ user: 'test', pwd: '123456', roles: [{ role: "readWrite", db: "test" }] });
創(chuàng)建數(shù)據(jù)庫(kù)并設(shè)置用戶完成毕匀,現(xiàn)在再嘗試使用Robo工具來(lái)連接下看看。
將Database和用戶名密碼改為我們剛才設(shè)置的癌别,點(diǎn)擊Test顯示成功皂岔。
保存后直接使用工具進(jìn)入數(shù)據(jù)庫(kù),可以看見(jiàn)test庫(kù)展姐。
至此躁垛,Docker版本MongoDB簡(jiǎn)單的安裝使用教程就完畢了。如還有其他不完善的地方圾笨,可在文章下面留言教馆,我會(huì)不定期更新。