若要在 macOS 使用 MongoDB,最簡單的方式就是使用 Docker。只要在 docker-compose.yml
描述好 MongoDB 設定, docker compose up -d
即可快速啟動。
Version
MongoDB 5.0.3
Docker Compose
docker-compose.yml
version: "3"
services:
mongo:
image: mongo:latest
container_name: mongo
volumes:
- ${DATA_DIR}:/data/db
- ${INITDB_DIR}:/docker-entrypoint-initdb.d
- ${CONFIG_DIR}:/data/configdb
ports:
- ${MONGO_PORT}:27017
restart: always
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
mongo-express:
image: mongo-express:latest
container_name: mongo-express
ports:
- ${MONGO_EXPRESS_PORT}:8081
restart: always
environment:
- ME_CONFIG_MONGODB_URL="mongodb://${MONGO_USER}:${MONGO_PASSWORD}@mongo:27017"
第 4 行
mongo:
image: mongo:latest
container_name: mongo
volumes:
- ${DATA_DIR}:/data/db
- ${INITDB_DIR}:/docker-entrypoint-initdb.d
- ${CONFIG_DIR}:/data/configdb
ports:
- ${MONGO_PORT}:27017
restart: always
environment:
- MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
設定 mongo service:
image: mongo:latest
:使用 Mongo 官方所提供 image 並使用最新版本container_name: mongo
:設定 container 名稱volumns
:${DATA_DIR}:/data/db
:設定 host 目錄對應到 MongoDB 內部 data 目錄${INITDB_DIR}:/docker-entrypoint-initdb.d
:設定 host 目錄對應到 MongoDB 內部初始化檔案目錄${CONFIG_DIR}:/data/configdb
:設定 host 目錄對應到 MongoDB 內部設定檔目錄
ports
:${MONGO_PORT}:27017
:設定 container 對外 port 與 MongoDB 的 port 對應
restart: always
:若執行失敗則重新啟動environment
:MONGO_INITDB_ROOT_USERNAME=${MONGO_USER}
:設定 idMONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD}
:設定 password
17 行
mongo-express:
image: mongo-express:latest
container_name: mongo-express
ports:
- ${MONGO_EXPRESS_PORT}:8081
restart: always
environment:
- ME_CONFIG_MONGODB_URL="mongodb://${MONGO_USER}:${MONGO_PASSWORD}@mongo:27017"
設定 mongo-experss service:
- MongoDB 的 web 管理介面
image: mongo-express:latest
:使用 MongoDB 官方所提供 image 並使用最新版本container_name: mongo-express
:設定 container 名稱ports
:${MONGO_EXPRESS_PORT}:8081
:設定 container 對外 port 與 Mongo Express 的 port 對應
restart: always
:若執行失敗則重新啟動environment
:ME_CONFIG_MONGODB_URL="mongodb://${MONGO_USER}:${MONGO_PASSWORD}@mongo:27017"
:設定連接 MongoDB 的 id 與 password
Environment Variable
.env
DATA_DIR=.data
INITDB_DIR=.initdb
CONFIG_DIR=.configdb
MONGO_PORT=27017
MONGO_USER=admin
MONGO_PASSWORD=12345
此為 docker-compose.yml
所設定的環境變數,被獨立在 .env
中,可單獨設定,將來不用修改 docker-compose.yml
。
DATA_DIR
:設定 host 儲存 data 目錄INITDB_DIR
:設定 host 儲存初始化檔案目錄CONFIG_DIR
:設定 host 儲存設定檔目錄MONGO_PORT
:設定 MongoDB 對外 portMONGO_USER
:設定 idMONGO_PASSWORD
:設定 password
Start MongoDB
$ docker compose up -d
使用 docker compose up
啟動 MongoDB。
-d
: d
etach,建立 container 後,就脫離目前 process
Mongo Express
MongoDB 與 Mongo Express 正常啟動。
DataGrip
以 DataGrip 連接 MongoDB。
由於 MongoDB 是以 Docker 執行,因此 host 填 localhost
,port 透過 27017
即可連接。
DataGrip 順利連上 MongoDB。
Stop MongoDB
$ docker compose down
使用 docker compose down
結束 MongoDB,並且刪除 container,但資料仍會留在 host。
Conclusion
- Mongo Express 必須設定
ME_CONFIG_MONGODB_URL
才能正常啟動,不能只設定ME_CONFIG_MONGODB_ADMINUSERNAME
與ME_CONFIG_MONGODB_ADMINPASSWORD