深圳開發(fā)網(wǎng)站建設(shè)搜索引擎推廣的基本方法
在現(xiàn)代開發(fā)環(huán)境中,容器化技術(shù)(如 Docker 和 Podman)已成為部署和管理應(yīng)用程序的標(biāo)準(zhǔn)方式。本文將詳細(xì)介紹如何使用 Podman/Docker 部署 MongoDB 數(shù)據(jù)庫,并確保其他應(yīng)用程序容器能夠通過 Docker 網(wǎng)絡(luò)成功連接到 MongoDB。我們將逐步解決常見的問題,如權(quán)限配置和認(rèn)證設(shè)置,應(yīng)用容器如何連接和使用容器中的MongoDB 數(shù)據(jù)庫等。
選擇 Podman 而不是 Docker
為什么選擇 Podman?
- 無守護(hù)進(jìn)程:Podman 不需要守護(hù)進(jìn)程(daemon)即可運(yùn)行容器,這使得它更安全和易于管理。
- 根權(quán)限不是必須:Podman 允許非特權(quán)用戶運(yùn)行容器,而 Docker 需要 root 權(quán)限或通過 docker 組來管理容器。
- 兼容性:Podman 可以與 Docker 鏡像和容器無縫兼容,這意味著你可以使用現(xiàn)有的 Dockerfile 和配置文件。
- 資源效率:Podman 更加輕量級,對資源的需求較低,適合在資源受限的環(huán)境中運(yùn)行。
1. 安裝 Podman
首先,確保你已經(jīng)安裝了 Podman。如果尚未安裝,可以按照以下步驟進(jìn)行安裝:
在 Ubuntu 上安裝 Podman
-
更新包列表
sudo apt-get update
-
安裝 Podman
sudo apt-get install -y podman
-
驗(yàn)證安裝
podman run hello-world
這將檢驗(yàn) Podman 是否安裝成功。
2. 創(chuàng)建并運(yùn)行 MongoDB 容器
2.1 創(chuàng)建目錄并調(diào)整權(quán)限
確保數(shù)據(jù)目錄和日志目錄存在并且權(quán)限正確。MongoDB 容器內(nèi)的 mongodb
用戶(UID 999 和 GID 999)需要對這些目錄有讀寫權(quán)限。
mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs
2.2 創(chuàng)建配置文件 mongod.conf
創(chuàng)建一個(gè) MongoDB 配置文件 mongod.conf
,內(nèi)容如下:
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"
2.3 創(chuàng)建自定義 Docker 網(wǎng)絡(luò)
創(chuàng)建一個(gè)自定義的 Docker 網(wǎng)絡(luò),以便其他容器可以連接到 MongoDB 容器。
podman network create dco-net
2.4 運(yùn)行 MongoDB 容器
使用以下命令運(yùn)行 MongoDB 容器,并確保配置文件正確掛載:
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
-d
:后臺(tái)運(yùn)行容器。-v ~/mongodb/data:/data/db
:將主機(jī)上的數(shù)據(jù)目錄掛載到容器內(nèi)的/data/db
目錄,實(shí)現(xiàn)數(shù)據(jù)持久化。-v ~/mongodb/logs:/var/log/mongodb
:將主機(jī)上的日志目錄掛載到容器內(nèi)的/var/log/mongodb
目錄,實(shí)現(xiàn)日志持久化。-v ~/mongodb/mongod.conf:/etc/mongod.conf
:將主機(jī)上的配置文件掛載到容器內(nèi)的/etc/mongod.conf
目錄,確保 MongoDB 使用指定的配置文件。--network dco-net
:將容器連接到自定義的dco-net
網(wǎng)絡(luò)。--name mongodb
:為容器指定名稱。docker.io/library/mongo:latest
:使用的 Docker 鏡像名稱,從官方 Docker Hub 拉取。-f /etc/mongod.conf
:指定使用/etc/mongod.conf
配置文件。
3. 創(chuàng)建 MongoDB 用戶和權(quán)限
3.1 進(jìn)入 MongoDB 容器并啟動(dòng) MongoDB Shell
podman exec -it mongodb /bin/bash
mongo
3.2 創(chuàng)建 admin 用戶和權(quán)限
在 MongoDB Shell 中,創(chuàng)建 admin
數(shù)據(jù)庫的用戶并分配權(quán)限。例如:
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit
3.3 創(chuàng)建 atomdco 用戶和權(quán)限
在 MongoDB Shell 中,創(chuàng)建 atomdco
數(shù)據(jù)庫的用戶并分配權(quán)限。例如:
podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit
4. 啟用 MongoDB 認(rèn)證
4.1 停止并刪除 MongoDB 容器
首先,停止并刪除現(xiàn)有的 MongoDB 容器,以確保新的容器能夠正確加載配置文件。
podman stop mongodb
podman rm mongodb
4.2 修改配置文件 mongod.conf
以啟用認(rèn)證
編輯 mongod.conf
文件,啟用 authorization
:
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"
4.3 重新運(yùn)行 MongoDB 容器
使用修改后的配置文件重新運(yùn)行 MongoDB 容器:
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
5. 驗(yàn)證 MongoDB 容器是否正確運(yùn)行
5.1 查看容器狀態(tài)
podman ps -a
你應(yīng)該能看到類似以下的輸出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd25ac473660 docker.io/library/mongo:latest mongod 6 minutes ago Up 6 minutes mongodb
5.2 查看日志文件
確保 MongoDB 容器正確加載了配置文件并啟動(dòng)了日志記錄。
podman logs mongodb
或者實(shí)時(shí)查看日志文件:
podman logs -f mongodb
你應(yīng)該能看到類似以下的日志信息,確認(rèn) MongoDB 正確加載了配置文件并監(jiān)聽了所有網(wǎng)絡(luò)接口:
{"t":{"$date":"2025-02-01T08:59:09.471Z"},"s":"I", "c":"CONTROL", "id":20568, "ctx":"main","msg":"Waiting for connections","attr":{"port":27017,"ssl":"disabled"}}
5.3 驗(yàn)證端口監(jiān)聽
進(jìn)入 MongoDB 容器并查看端口是否正確監(jiān)聽。
podman exec -it mongodb /bin/bash
ss -tuln
你應(yīng)該能看到類似以下的輸出:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 0 0.0.0.0:27017 0.0.0.0:*
6. 應(yīng)用所在的容器如何連接到mongodb容器
假設(shè)有一godco的應(yīng)用,有配置文件etc/godco-api.yaml
,演示下該應(yīng)用,如何使用上述創(chuàng)建好的mongodb數(shù)據(jù)庫。
修改 etc/godco-api.yaml
中的 MongoDB 連接字符串。
由于 godco
容器和 mongodb
容器在同一個(gè)自定義網(wǎng)絡(luò)中,可以使用 mongodb
作為主機(jī)名。修改 etc/godco-api.yaml
文件中的 MongoDB 連接字符串如下:
MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"
在這個(gè)配置中:
mongodb
是 MongoDB 容器的名稱。test1
是 MongoDB 用戶名。111111
是 MongoDB 密碼。authSource=atomdco
指定認(rèn)證數(shù)據(jù)庫為atomdco
。
7. 運(yùn)行 godco
容器并連接到自定義網(wǎng)絡(luò)
使用以下命令運(yùn)行 godco
容器,并將其連接到自定義網(wǎng)絡(luò):
podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest
-d
:后臺(tái)運(yùn)行容器。-p 8080:8080
:將容器的 8080 端口映射到主機(jī)的 8080 端口。-v /path/to/your/etc:/app/etc
:將主機(jī)上的配置文件目錄掛載到容器內(nèi)的/app/etc
目錄。-v /path/to/your/static:/app/static
:將主機(jī)上的靜態(tài)文件目錄掛載到容器內(nèi)的/app/static
目錄。--network dco-net
:將容器連接到自定義的dco-net
網(wǎng)絡(luò)。--name dco-verification-app
:為容器指定名稱。godco:latest
:使用的 Docker 鏡像名稱。
8. 驗(yàn)證 godco
容器是否成功連接到 MongoDB
查看 godco
容器的日志文件,以確認(rèn)它是否成功連接到 MongoDB 容器。
podman logs dco-verification-app
或者實(shí)時(shí)查看日志文件:
podman logs -f dco-verification-app
你應(yīng)該能看到類似以下的日志信息,確認(rèn) godco
成功連接到 MongoDB:
[info] Connected to MongoDB server at mongodb:27017
[info] MongoDB database atomdco is ready
9. 使用 mongosh
連接到 MongoDB 并提供認(rèn)證信息
9.1 獲取 MongoDB 容器的 IP 地址
如果你的 MongoDB 容器已經(jīng)映射了宿主機(jī)的端口(例如,使用 -p 27017:27017 參數(shù)),您可以直接使用宿主機(jī)的 IP 地址和映射的端口來連接。
mongosh "mongodb://username:password@localhost:27017/?authSource=atomdco"
由于上述我的測試沒有啟用該端口映射,所以需要以下方式連接:
使用 podman inspect
命令獲取 MongoDB 容器的 IP 地址:
podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
假設(shè)輸出的 IP 地址為 10.89.0.5
。
9.2 連接到 MongoDB 并提供認(rèn)證信息
使用 mongosh
連接到 MongoDB 并提供認(rèn)證信息。例如:
mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"
9.3 驗(yàn)證數(shù)據(jù)庫
在 mongosh
中,你可以使用 show databases
命令來查看數(shù)據(jù)庫。
show databases
你應(yīng)該能看到類似以下的輸出:
admin 0.000GB
config 0.000GB
local 0.000GB
atomdco 0.000GB
10. 常見問題及解決方法
10.1 配置文件路徑錯(cuò)誤
確保配置文件路徑正確,并且文件存在。
10.2 配置文件語法錯(cuò)誤
檢查 mongod.conf
文件是否有語法錯(cuò)誤??梢允褂?mongod --config /etc/mongod.conf
在主機(jī)上測試配置文件。
10.3 權(quán)限問題
確保數(shù)據(jù)目錄和日志目錄對 MongoDB 容器有正確的讀寫權(quán)限。使用 chown
命令調(diào)整權(quán)限。
10.4 鏡像版本問題
確保你使用的 MongoDB 鏡像版本正確,并且配置文件與該版本兼容。
11. 總結(jié)
通過上述步驟,你可以成功地使用 Podman 部署 MongoDB 數(shù)據(jù)庫,并確保其他應(yīng)用程序容器能夠通過 Docker 網(wǎng)絡(luò)成功連接到 MongoDB。以下是完整的步驟總結(jié):
11.1 創(chuàng)建目錄并調(diào)整權(quán)限
mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs
11.2 創(chuàng)建配置文件 mongod.conf
(禁用認(rèn)證)
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"
11.3 創(chuàng)建自定義 Docker 網(wǎng)絡(luò)
podman network create dco-net
11.4 運(yùn)行 MongoDB 容器(禁用認(rèn)證)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
11.5 創(chuàng)建 admin 用戶和權(quán)限
podman exec -it mongodb /bin/bash
mongo
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit
11.6 創(chuàng)建 atomdco 用戶和權(quán)限
podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit
11.7 停止并刪除 MongoDB 容器
podman stop mongodb
podman rm mongodb
11.8 修改配置文件 mongod.conf
以啟用認(rèn)證
編輯 mongod.conf
文件,啟用 authorization
:
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"
11.9 重新運(yùn)行 MongoDB 容器(啟用認(rèn)證)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
11.10 驗(yàn)證 MongoDB 容器是否正確運(yùn)行
podman ps -a
11.11 驗(yàn)證日志文件
ls -l ~/mongodb/logs
11.12 驗(yàn)證端口監(jiān)聽
podman exec -it mongodb /bin/bash
ss -tuln
11.13 修改 etc/godco-api.yaml
中的 MongoDB 連接字符串
MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"
11.14 運(yùn)行 godco
容器
podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest
11.15 驗(yàn)證 godco
容器的日志
podman logs dco-verification-app
或者實(shí)時(shí)查看日志文件:
podman logs -f dco-verification-app
11.16 使用 mongosh
連接到 MongoDB 并提供認(rèn)證信息
-
獲取 MongoDB 容器的 IP 地址
podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
假設(shè)輸出的 IP 地址為
10.89.0.5
。 -
連接到 MongoDB 并提供認(rèn)證信息
mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"
-
驗(yàn)證數(shù)據(jù)庫
show databases
你應(yīng)該能看到類似以下的輸出:
admin 0.000GB config 0.000GB local 0.000GB atomdco 0.000GB
通過這些步驟,確保 MongoDB 容器正確運(yùn)行并加載配置文件,同時(shí) godco
容器能夠通過 Docker 網(wǎng)絡(luò)成功連接到 MongoDB 容器。
12. 參考資料
- Podman 官方文檔
- MongoDB 官方文檔
- MongoDB Shell 官方文檔
13. 作者信息
Author: csdn貓哥,轉(zhuǎn)載請注明出處
Date: 2025-02-01
通過本文,你將掌握如何使用 Podman 部署 MongoDB 數(shù)據(jù)庫,并配置其他容器通過 Docker 網(wǎng)絡(luò)連接到 MongoDB。確保在每一階段都仔細(xì)檢查配置文件和權(quán)限設(shè)置,以避免常見的啟動(dòng)問題。
詳細(xì)步驟和命令總結(jié)
以下是完整的步驟和命令總結(jié),確保 MongoDB 容器正確部署并啟用認(rèn)證:
1. 創(chuàng)建目錄并調(diào)整權(quán)限
mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs
2. 創(chuàng)建配置文件 mongod.conf
(禁用認(rèn)證)
在主機(jī)上創(chuàng)建 mongod.conf
文件,內(nèi)容如下:
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"
3. 創(chuàng)建自定義 Docker 網(wǎng)絡(luò)
podman network create dco-net
4. 運(yùn)行 MongoDB 容器(禁用認(rèn)證)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
5. 創(chuàng)建 admin 用戶和權(quán)限
podman exec -it mongodb /bin/bash
mongo
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit
6. 創(chuàng)建 atomdco 用戶和權(quán)限
podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit
7. 停止并刪除 MongoDB 容器
podman stop mongodb
podman rm mongodb
8. 修改配置文件 mongod.conf
以啟用認(rèn)證
編輯 mongod.conf
文件,啟用 authorization
:
systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"
9. 重新運(yùn)行 MongoDB 容器(啟用認(rèn)證)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
10. 驗(yàn)證 MongoDB 容器是否正確運(yùn)行
podman ps -a
11. 驗(yàn)證日志文件
ls -l ~/mongodb/logs
12. 驗(yàn)證端口監(jiān)聽
podman exec -it mongodb /bin/bash
ss -tuln
13. 修改 etc/godco-api.yaml
中的 MongoDB 連接字符串
MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"
14. 運(yùn)行 godco
容器
podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest
15. 驗(yàn)證 godco
容器的日志
podman logs dco-verification-app
或者實(shí)時(shí)查看日志文件:
podman logs -f dco-verification-app
16. 使用 mongosh
連接到 MongoDB 并提供認(rèn)證信息
-
獲取 MongoDB 容器的 IP 地址
podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
假設(shè)輸出的 IP 地址為
10.89.0.5
。 -
連接到 MongoDB 并提供認(rèn)證信息
mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"
-
驗(yàn)證數(shù)據(jù)庫
show databases
你應(yīng)該能看到類似以下的輸出:
admin 0.000GB config 0.000GB local 0.000GB atomdco 0.000GB
通過這些步驟,確保 MongoDB 容器正確運(yùn)行并加載配置文件,同時(shí) godco
容器能夠通過 Docker 網(wǎng)絡(luò)成功連接到 MongoDB 容器。
希望這篇博文能幫助你順利使用 Docker/Podman 部署 MongoDB 數(shù)據(jù)庫,并解決常見的部署和使用問題。如果你有任何疑問或遇到其他問題,請隨時(shí)留言提問。