2021 iThome 鐵人賽 - DAY2 MongoDB 安裝與使用

2021 iThome 鐵人賽 MongoDB披荊斬棘之路


DAY2 安裝與使用 MongoDB

MongoDB 在社群, 非營利環境使用是免費的,而我一律推薦使用 docker 來操作,一來省掉一堆平台相容性以及安裝上遇到的問題,二來大家都會是一樣的起始狀態,三來是弄壞了也不用擔心重裝麻煩之類的。所以本篇以下不會介紹到任何os獨有安裝方式,僅使用 docker 而已,如果對 docker 熟稔的朋友就可以直接跳過本篇了。

安裝

Application 安裝模式會因為各種os有所不同,這邊不會一一介紹,有需要的可以直接參考官網 各個平台安裝 MongoDB 方法。我要用的是以 docker 方式來啟動 MongoDB。(開始前請先安裝 docker)

首先直接從 docker hub 拉取最新的映像檔(image)

docker pull mongo:latest

有指定的版本號或 tag 也可以去 docker hub 查看

1
2
3
4
5
6
7
8
➜  / docker pull mongo:latest
latest: Pulling from library/mongo
16ec32c2132b: Already exists
81447d2c233f: Pull complete
Digest: sha256:93ea50c5f15f9814870b3509449d327c5bc4d38f2b17c20acec528472811a723
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest
➜ /

這樣就成功版最新的版本映像檔拉回本機囉!我們還是先確認 image 是否存在

docker image ls

1
2
3
➜  / docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
mongo latest 269b735e72cb 3 weeks ago 682MB

看到 tag 欄位,latest 畢竟是 latest,我們還是不知道是哪一個版本,如果想看拉回來的 MongoDB 是什麼版本,可以使用 dk image inspect [IMAGE ID] 來查看細節。

啟動

接著看怎麼啟動 MongoDB 吧!

docker run -d mongo

我們再輸入 docker ps ls 來查看有哪些正在執行的 docker

1
2
3
4
5
6
7
➜  / docker run -d mongo
11ef37ced7a9797e9ba9bb307232ad340533f6277801203b009b2fbb6d1b3daa

➜ / dk ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11ef37ced7a9 mongo "docker-entrypoint.s…" 2 seconds ago Up 1 second 27017/tcp elegant_lamport
➜ /

關於這個 -d 參數千萬不能漏掉,因為沒加上去的話就會被佔用一個 terminal 視窗,要多開一個會很麻煩(網路梗),-d 是背景執行的意思。

設定 port 與 名稱

如上面 terminal 結果,實務上我們還會多給予一些設定,例如 port 與 名稱,這樣才能協助我們從眾多 docker 執行體中找到 mongoDB。

預設的 MongoDB port 是 27017,我們把 port 號改為 27666,同時名字也改為辨識度高一點的的。

dk run -d -p 27666:27017 --name mongoTest mongo

結果

1
2
3
➜  / dk ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d48d1c66439 mongo "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:27666->27017/tcp, :::27666->27017/tcp mongoTest

關閉

我們使用 docker ps 指令列出目前正在執行的容器,可以透過docker stop 指令來關閉,帶入的可以是 CONTAINER IDNAMES,我自己是比較喜歡用 ID,因為不用完整輸入名稱,只要前幾碼而已。

例如上面的 CONTAINER ID: 9d48d1c66439, NAMES: mongoTest,你可以用以下方式輸入:

  • docker stop mongoTest
  • docker stop 9d48d1c66439
  • docker stop 9d4 (可以更少,但避免誤停,還是多個幾碼吧)

docker-compose 出場

現在你已經會使用 docker 運作 MongoDB 了,那為什麼還需要 docker-compose?因為科技始終來自於惰性,人是很懶惰打一堆指令的,於是我們把相關設定都直接寫在 yaml 內,我只要記得 docker-compose up & docker-compose down 就好了!(其實我更懶,加上 alias,只需要 dc up & dc down

首先在專案底下建立一個檔案名字是 docker-compose.yml,記得名字要對,內容就照著以下打即可

1
2
3
4
5
6
7
8
version: '3'
services:
mongoTest:
image: mongo
container_name: mongoTest
ports:
- "27666:27017"
entrypoint: [ "/usr/bin/mongod","--bind_ip", "localhost"]

接著在路徑資料夾輸入 docker-compose up 就可以看到 MongoDB 啟動囉!

保留容器資料

前面有提到,使用 docker 的好處是每次啟動都像新的一樣,我所需要使用的初始資料都會準備在一個初始用的腳本內,啟動時順手把資料寫進資料庫。

那如果想保留資料的話該怎麼做?
其實也很簡單,在 yml 內新增 volumes 設定。完整如下:

1
2
3
4
5
6
7
8
9
version: '3'
services:
mongo_test:
image: mongo
container_name: mongo_test
ports:
- "27666:27017"
volumes:
- "~/Desktop/mount-mongo-data:/data/db"

: 前面的路徑就是實體位置,你也可以修改成你想儲存的位置。
所以我是將 MongoDB 的資料儲存在 ~/Desktop/mount-mongo-data 底下喔!


學會如何使用 docker 啟動 MongoDB 後,接下來就是如何連線了!請期待明天吧!

  • 作者: MingYi Chou
  • 版權聲明: 轉載不用問,但請註明出處!本網誌均採用 BY-NC-SA 許可協議。