# 用 Docker 玩 Mongo
###### tags: `Docker` `MongoDb`
## 前置步驟
有安裝docker環境即可
# 實作步驟
[TOC]
# 一、建立Mongodb
## 1. 拉取MongoDb镜像
預設版本為最新版,以下指令可以取得最新版的MongoDb鏡像
```shell=
docker pull mongo
```
運行結果

## 2. 運行MongoDB 的映像檔
在運行之前我們可以事先建立容器要對應的實體路徑
1. 範例是使用Windows系統故路徑為: C:\temp\MonoDbData。
2. 27017為MongoDb預設port。
3. 啟用MongoDb預設可以不使用帳號就可以使用,如果需要帳號流程可參考擴充內容。
```shell=
docker run --name mongo4 -v C:\temp\MonoDbData:/data/db -d -p 27017:27017 --rm mongo
```
### 參數解釋:
* --name:容器名稱
* -v:實體位置對應容器內部位置
* -d:背景執行
* -p:實體port對應容器內部port
* -rm:結束後立即移除
運行結果如下

此運行方式其**MongoDb無帳號密碼管控連線時不需帶入帳密**,下圖為Robo 3T測試結果

其對應的實體路徑下也會有檔案產生,之後操作DB的資料也就不怕docker掛掉而遺失了

## 3. 停止容器
關掉 mongodb 資料庫輸入以下指令即可,其"mongo4"可以替換成任何容器名稱
```shell=
docker stop mongo4
```
# 二、基本檢視和操作
1. 進入容器內
```shell=
docker exec -it mongo4 bash
```

2. 進入mongo指令操作
```shell=
mongo
```

MongoDb相關CRUD操作就靠各為自己學習了,可以至底部參考資料參考,或是使用工具進行操作都是可行的,或是可以參考 [MongoDb 快速指令查詢](/_Ta1VUK_Sj-BhoCr-Ym2ZQ) 裡面有基本操作
這邊稍微列一下可以操作的方式
```shell=
# 連入DB(預設port 27017)
mongo
# 顯示DB
show dbs
# 切換dbname(注意大小寫)
use dbname
# 顯示集合
show collections
# 資料查詢
db.system.version.find()
# 指令,離開資料庫或容器
exit
```

確認資料庫狀況
```shell=
docker exec mongo4 mongo --eval "print(version())"
```

# 擴充內容
## 啟用權限認證
在腳本後方加上`mongod --auth` 命令使MongoDb啟動時可以限定一定要使用帳密登入
```shell=
docker run --name mongo4 -p 27017:27017 --rm mongo mongod --auth
```
## docker-compose腳本
該腳本有針對權限限制和一些容量做設定,可能依據不同需求在下去修改。
```yaml=
version: '3.7'
services:
mongo:
container_name: mongo
hostname: mongo
image: mongo:latest
volumes:
- /data/mongo/db:/data/db
- /data/mongo/conf:/data/configdb
environment:
- MONGO_INITDB_ROOT_USERNAME=admin
- MONGO_INITDB_ROOT_PASSWORD=123456
logging:
driver: 'json-file'
options:
max-file: '10'
max-size: '1024m'
ports:
- "27017:27017"
networks:
- mongo-net
restart: always
command: ["mongod", "--oplogSize=1024", "--wiredTigerCacheSizeGB=1", "--auth", "--noscripting"]
networks:
mongo-net:
driver: bridge
name: mongo-net
```
# 結論
這邊有時做一個[[Node的範例](https://github.com/goalineage/Nodejs-mongoDB-test)]裡面是用Docker-compose的方式運行,不熟的可以前往[快速建立MongoDB](/ybC1gIq_SAeyngNFb6CEkw)複習一下。
<br/>
---
### 相關參考來源:
[Day 15 - 二周目 - 用 Docker 玩轉 MongoDB](https://ithelp.ithome.com.tw/articles/10201657)
<style>
code > span{ color: red;}
</style>