1. 程式人生 > 其它 >docker mongo建立一個新資料庫幷包含使用者名稱密碼

docker mongo建立一個新資料庫幷包含使用者名稱密碼

使用docker mongo建立一個新資料庫幷包含使用者名稱密碼(方式二)

有時在測試或新建測試專案後,需要一個簡易的 mongo 資料庫並帶使用者名稱和密碼。 如果使用 mongo 語法命令會比較麻煩,主要目的是測試,重點不在 mongo 資料庫的搭建上,這時使用 docker 就非常方便

實現目標

  1. mongo 資料庫的管理賬號: root 管理密碼: root
  2. 新建一個mongo 資料庫,資料庫名: JJ
  3. 剛新建的資料庫的賬號: cms 密碼: hello123456===
  4. mongo db 的埠號: 27017
  5. 以上密碼 在版本控制器之外,獨立出來

組織結構

1
2
3
4
5
6
7

8
9
10
.
|
├── data
| ├── db
|
├── docker-compose.yml
|
├── init-mongo.sh
|
└── dev.env

檔案內容

docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
version: '3.1'

services:
mongo:
image: mongo:3.6.18
container_name: mongo_server
env_file:
- ${NODE_ENV}.env
ports:
- 27017:27017
volumes:

- ./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh
- ./data/db:/data/db

init-mongo.sh

1
2
3
4
5
6
7
8
9
10
mongo -- "$MONGO_INITDB_DATABASE" <<EOF
var rootUser = '$MONGO_INITDB_ROOT_USERNAME';
var rootPassword = '$MONGO_INITDB_ROOT_PASSWORD';
var admin = db.getSiblingDB('admin');

admin.auth(rootUser, rootPassword);

var user = '$MONGO_INITDB_USERNAME';
var passwd = '$MONGO_INITDB_PASSWORD';
db.createUser({user: user, pwd: passwd, roles: ["readWrite"]});
EOF

dev.env

1
2
3
4
5
6
# define env var default value.
MONGO_INITDB_ROOT_USERNAME=root
MONGO_INITDB_ROOT_PASSWORD=root
MONGO_INITDB_DATABASE=JJ
MONGO_INITDB_USERNAME=cms
MONGO_INITDB_PASSWORD=hello123456===

我的 ubuntu 裡設定了系統環境變數 NODE_ENV=dev, 所以執行的時候就會取 dev.env 檔案

檢查配置

1
docker-compose config

執行

1
docker-compose up

刪除

1
docker-compose rm -f mongo_server

測試

可以使用 Studio 3T for mongoDB 進行連線測試

延申思考

init-mongo.sh 是mongo首次啟動執行的指令碼.那麼如果需要初始化一些 mongo 基礎資料表, 是不是不遠了?

補充

配置不同場景下的環境變數

從這兩中的方式中我們可以看到,docker compose 提供了足夠的靈活性來讓我們設定 docker-compose.yml 檔案中引用的環境變數,它們的優先順序如下:

  1. Compose file
  2. Shell environment variables
  3. Environment file
  4. Dockerfile
  5. Variable is not defined
    首先,在 docker-compose.yml 檔案中直接設定的值優先順序是最高的。
    然後是在當前 shell 中 export 的環境變數值。
    接下來是在環境變數檔案中定義的值。
    再接下來是在 Dockerfile 中定義的值。
    最後還沒有找到相關的環境變數就認為該環境變數沒有被定義。