Docker部署MongoDB詳細指南
在現(xiàn)代的Web開發(fā)中,數(shù)據(jù)庫是不可或缺的一部分。MongoDB作為一種流行的NoSQL數(shù)據(jù)庫,因其靈活的文檔結(jié)構(gòu)和高性能而廣受歡迎。本文將詳細介紹如何在Ubuntu 24.04系統(tǒng)上使用Docker部署MongoDB,包括創(chuàng)建存儲目錄、啟動容器、創(chuàng)建用戶以及測試連接等步驟。
一、創(chuàng)建MongoDB存儲目錄并設(shè)置權(quán)限
首先,我們需要創(chuàng)建一個目錄來存儲MongoDB的數(shù)據(jù)文件,并為該目錄設(shè)置適當?shù)臋?quán)限。執(zhí)行以下命令:
sudo mkdir -p /www/app/data/db && sudo chmod 777 /www/app/data/db
這個命令會在/www/app/目錄下創(chuàng)建一個名為data/db的文件夾,并將該文件夾的權(quán)限設(shè)置為777,以確保所有用戶都可以讀寫該目錄。
二、創(chuàng)建MongoDB容器
接下來,我們將使用Docker命令來啟動一個MongoDB容器。執(zhí)行以下命令:
sudo docker run -d --name mongodb -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root_password -v /www/app/data/db:/data/db mongodb/mongodb-community-server:latest
這條命令會執(zhí)行以下操作:
-
-d:以后臺模式運行容器。 -
--name mongodb:將容器命名為mongodb。 -
-p 27017:27017:將主機的27017端口映射到容器的27017端口。 -
-e MONGO_INITDB_ROOT_USERNAME=root:初始化數(shù)據(jù)庫時使用的管理員用戶名。 -
-e MONGO_INITDB_ROOT_PASSWORD=root_password:初始化數(shù)據(jù)庫時使用的管理員密碼。 -
-v /www/app/data/db:/data/db:將主機上的/www/app/data/db目錄掛載到容器內(nèi)的/data/db目錄。 -
mongodb/mongodb-community-server:latest:使用最新的官方MongoDB社區(qū)版鏡像。
三、進入MongoDB容器的Shell
為了進一步操作MongoDB,我們可以進入容器的Shell環(huán)境。執(zhí)行以下命令:
sudo docker exec -it mongodb mongosh --username root --password root_password
此命令將會啟動一個交互式的MongoDB shell,并使用我們之前設(shè)置的管理員賬號進行登錄。
四、為數(shù)據(jù)庫創(chuàng)建用戶
在MongoDB shell中,我們可以為特定的數(shù)據(jù)庫創(chuàng)建新用戶。假設(shè)我們要在db_name數(shù)據(jù)庫中創(chuàng)建一個用戶,可以執(zhí)行以下命令:
use db_name;
db.createUser({user: "db_username", pwd: "db_password", roles: [{role: "dbOwner", db: "db_name"}]});
這段JavaScript代碼做了以下幾件事:
-
use db_name;:選擇要操作的數(shù)據(jù)庫。 -
db.createUser(...):創(chuàng)建一個新用戶,賦予該用戶對指定數(shù)據(jù)庫的完全控制權(quán)限(dbOwner角色)。
五、測試連接
為了確認我們的新用戶能夠成功連接到數(shù)據(jù)庫,我們可以使用以下命令進行測試:
sudo docker exec -it mongodb mongosh -u "db_username" -p "db_password" --authenticationDatabase "db_name"
如果一切配置正確,該命令將會啟動一個新的MongoDB shell,并使用我們剛剛創(chuàng)建的用戶進行登錄。
通過以上步驟,我們已經(jīng)成功地在Docker中部署了MongoDB,并且創(chuàng)建了一個具有管理權(quán)限的新用戶。希望這篇技術(shù)分享文章對你有所幫助!