最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零搭建到生產(chǎn)環(huán)境配置詳解Docker部署MongoDB的完整流程

 更新時(shí)間:2026年05月26日 08:33:09   作者:身如柳絮隨風(fēng)揚(yáng)  
在容器化技術(shù)日益普及的今天,使用?Docker?部署?MongoDB?已經(jīng)成為開(kāi)發(fā)和生產(chǎn)環(huán)境的標(biāo)配方案,本文詳細(xì)介紹了使用Docker部署MongoDB的全過(guò)程,希望可以帶大家全面掌握?Docker?部署?MongoDB?的核心技能

1. 引言

在容器化技術(shù)日益普及的今天,使用 Docker 部署 MongoDB 已經(jīng)成為開(kāi)發(fā)和生產(chǎn)環(huán)境的標(biāo)配方案。通過(guò)容器化部署,我們可以快速創(chuàng)建隔離的數(shù)據(jù)庫(kù)環(huán)境,確保在不同系統(tǒng)間的一致性和可移植性。MongoDB 官方在 Docker Hub 上維護(hù)了官方鏡像,拉取即用,大大簡(jiǎn)化了安裝配置流程。

本文將從基礎(chǔ)到進(jìn)階,帶你全面掌握 Docker 部署 MongoDB 的核心技能:

  • 單節(jié)點(diǎn) MongoDB 快速部署
  • 數(shù)據(jù)持久化與用戶認(rèn)證配置
  • 使用 Docker Compose 編排完整服務(wù)棧
  • 生產(chǎn)環(huán)境性能優(yōu)化與安全管理
  • 副本集(Replica Set)集群搭建

無(wú)論你是開(kāi)發(fā)環(huán)境搭建,還是準(zhǔn)備將 MongoDB 容器化上生產(chǎn),本文都能提供實(shí)用的參考。

2. 環(huán)境準(zhǔn)備

開(kāi)始之前,請(qǐng)確保 Docker 已正確安裝并運(yùn)行:

# 檢查 Docker 服務(wù)狀態(tài)
sudo service docker status

# 確認(rèn) Docker 已安裝
docker --version

如果 Docker 尚未安裝,請(qǐng)參考官方文檔進(jìn)行安裝(Ubuntu/CentOS 等主流發(fā)行版均有詳細(xì)指南)。

3. 快速部署:?jiǎn)喂?jié)點(diǎn) MongoDB

3.1 拉取鏡像

# 拉取最新官方鏡像
docker pull mongo

# 拉取指定版本(如 7.0.14)
docker pull mongo:7.0.14

3.2 運(yùn)行容器(基礎(chǔ)版)

docker run -d --name mongodb -p 27017:27017 mongo

參數(shù)說(shuō)明:

  • -d:后臺(tái)運(yùn)行容器
  • --name mongodb:指定容器名稱
  • -p 27017:27017:將宿主機(jī)的 27017 端口映射到容器的 MongoDB 默認(rèn)端口

3.3 連接驗(yàn)證

# 進(jìn)入容器交互式 Shell
docker exec -it mongodb mongosh

如果成功進(jìn)入 MongoDB Shell,說(shuō)明部署已完成。

4. 數(shù)據(jù)持久化:讓數(shù)據(jù)不丟失

容器默認(rèn)將數(shù)據(jù)存儲(chǔ)在容器內(nèi)部的 /data/db 目錄中,容器一旦刪除,所有數(shù)據(jù)都會(huì)丟失。Docker 提供了兩種數(shù)據(jù)持久化方式:

方式說(shuō)明適用場(chǎng)景
綁定掛載(Bind Mount)將宿主機(jī)目錄直接映射到容器需要直接訪問(wèn)宿主機(jī)文件
命名卷(Named Volume)Docker 管理的獨(dú)立存儲(chǔ)空間生產(chǎn)環(huán)境推薦,便于備份遷移

4.1 綁定掛載(Bind Mount)

# 創(chuàng)建宿主機(jī)數(shù)據(jù)目錄
mkdir -p /data/mongodb

# 啟動(dòng)容器并掛載目錄
docker run -d --name mongodb \
  -p 27017:27017 \
  -v /data/mongodb:/data/db \
  mongo

關(guān)鍵點(diǎn):宿主機(jī)目錄必須存在且有正確權(quán)限,否則 MongoDB 容器可能因權(quán)限不足而啟動(dòng)失敗。

4.2 命名卷(Named Volume)

# 創(chuàng)建命名卷
docker volume create mongodb_data

# 掛載卷啟動(dòng)容器
docker run -d --name mongodb \
  -p 27017:27017 \
  -v mongodb_data:/data/db \
  mongo

為什么推薦命名卷? 命名卷完全由 Docker 管理,不依賴宿主機(jī)目錄結(jié)構(gòu),更易于備份、遷移和多容器共享。

5. 用戶認(rèn)證與安全配置

生產(chǎn)環(huán)境必須啟用身份認(rèn)證,確保數(shù)據(jù)庫(kù)不被未授權(quán)訪問(wèn)。

5.1 環(huán)境變量初始化(推薦方式)

MongoDB 官方鏡像支持通過(guò)環(huán)境變量在首次啟動(dòng)時(shí)自動(dòng)創(chuàng)建 Root 用戶:

docker run -d --name mongodb \
  -p 27017:27017 \
  -v mongodb_data:/data/db \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=your_secure_password \
  mongo

重要提醒

  • 兩個(gè)變量必須同時(shí)設(shè)置,缺一不可,否則鏡像不會(huì)啟用鑒權(quán)。
  • 變量名是固定的MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD 是 MongoDB 官方鏡像定義的標(biāo)準(zhǔn)變量,不能改名。
  • 僅在首次啟動(dòng)生效:如果數(shù)據(jù)目錄已有數(shù)據(jù),環(huán)境變量不會(huì)觸發(fā)初始化。如需重新初始化,必須刪除數(shù)據(jù)卷后再重啟。

5.2 驗(yàn)證鑒權(quán)是否生效

# 使用管理員憑證連接
docker exec -it mongodb mongosh -u admin -p your_secure_password --authenticationDatabase admin

連接后執(zhí)行以下命令驗(yàn)證權(quán)限:

# 切換至測(cè)試庫(kù)
use test
# 嘗試寫(xiě)入 - 應(yīng)報(bào)錯(cuò) "not authorized"(普通用戶無(wú)權(quán)限)
db.test.insertOne({x:1})

如果鑒權(quán)未生效,show dbs 等命令會(huì)直接列出所有數(shù)據(jù)庫(kù),說(shuō)明容器沒(méi)有啟用 --auth 模式。

6. Docker Compose 高級(jí)配置

使用 Docker Compose 可以更優(yōu)雅地管理多容器服務(wù)。以下是一個(gè)完整的 docker-compose.yml 示例,包含 MongoDB 數(shù)據(jù)庫(kù)和 Mongo Express 可視化管理界面:

version: '3.8'
services:
  mongodb:
    image: mongo:7.0.14
    container_name: mongodb
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin
      MONGO_INITDB_ROOT_PASSWORD: your_secure_password
      MONGO_INITDB_DATABASE: app_db
      TZ: Asia/Shanghai
    ports:
      - "27017:27017"
    volumes:
      - mongodb_data:/data/db
      - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
    networks:
      - mongodb_network
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5
  mongo-express:
    image: mongo-express:latest
    container_name: mongo-express
    restart: always
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: admin
      ME_CONFIG_MONGODB_ADMINPASSWORD: your_secure_password
      ME_CONFIG_MONGODB_SERVER: mongodb
    ports:
      - "8081:8081"
    depends_on:
      - mongodb
    networks:
      - mongodb_network
networks:
  mongodb_network:
    driver: bridge
volumes:
  mongodb_data:

6.1 自動(dòng)初始化腳本

上述配置中掛載了 init-mongo.js 腳本,該腳本會(huì)在 MongoDB 初始化時(shí)自動(dòng)執(zhí)行,可用于創(chuàng)建額外的數(shù)據(jù)庫(kù)和業(yè)務(wù)用戶:

// init-mongo.js
db = db.getSiblingDB('app_db');
db.createUser({
  user: 'app_user',
  pwd: 'app_user_password',
  roles: [{ role: 'readWrite', db: 'app_db' }]
});
// 可選:創(chuàng)建集合或索引
db.createCollection('users');

6.2 啟動(dòng)服務(wù)

# 后臺(tái)啟動(dòng)所有服務(wù)
docker-compose up -d

# 查看服務(wù)狀態(tài)
docker-compose ps

# 查看實(shí)時(shí)日志
docker-compose logs -f mongodb

啟動(dòng)成功后:

  • MongoDB 服務(wù)監(jiān)聽(tīng) 27017 端口
  • Mongo Express 管理界面訪問(wèn) http://localhost:8081,使用配置的管理員賬號(hào)登錄

7. 生產(chǎn)環(huán)境優(yōu)化與安全加固

7.1 內(nèi)存管理優(yōu)化

MongoDB 默認(rèn)使用 WiredTiger 存儲(chǔ)引擎,其緩存大小默認(rèn)為系統(tǒng)內(nèi)存的 50%–70%。在 Docker 容器中運(yùn)行時(shí),需要同時(shí)限制容器內(nèi)存和 WiredTiger 緩存。

容器級(jí)限制

docker run -d --name mongodb \
  -m 4g \                           # 限制容器最大內(nèi)存 4GB
  --memory-swap 4g \                # 禁用 swap(可選)
  -v mongodb_data:/data/db \
  mongo --wiredTigerCacheSizeGB 2   # 限制 WT 緩存為 2GB

核心原則:WiredTiger 緩存大小應(yīng)始終小于容器的內(nèi)存上限,并為操作系統(tǒng)和其他進(jìn)程預(yù)留 10%–20% 的空間。在 Docker 或 Kubernetes 環(huán)境中,建議按可用內(nèi)存比例的 50%–60% 配置 cacheSizeGB。

Docker Compose 中的配置

services:
  mongodb:
    image: mongo:7.0.14
    deploy:
      resources:
        limits:
          memory: 4G
    command: ["--wiredTigerCacheSizeGB", "2"]

7.2 常見(jiàn)性能問(wèn)題定位

現(xiàn)象可能原因排查方法
內(nèi)存占用持續(xù)增長(zhǎng)WiredTiger 緩存未限制db.serverStatus().wiredTiger.cache 查看 bytes currently in the cache
寫(xiě)入延遲抖動(dòng)臟頁(yè)過(guò)多,檢查點(diǎn)卡頓bytes dirty in the cache 持續(xù)偏高,可調(diào)低 vm.dirty_ratio
高并發(fā)下連接失敗連接池耗盡db.serverStatus().connections 查看連接數(shù),應(yīng)用端優(yōu)化連接復(fù)用

7.3 跨服務(wù)依賴與健康檢查

當(dāng) MongoDB 作為依賴服務(wù)(如與 Spring Boot、Node.js 等應(yīng)用共享網(wǎng)絡(luò))時(shí),需要在 docker-compose.yml 中配置健康檢查,確保依賴容器在數(shù)據(jù)庫(kù)完全就緒后才啟動(dòng)。

services:
  mongodb:
    image: mongo:7.0.14
    healthcheck:
      test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 5s
      retries: 5
  myapp:
    image: myapp:latest
    depends_on:
      mongodb:
        condition: service_healthy   # 等待 MongoDB 健康后再啟動(dòng)

7.4 安全加固清單

  • 啟用身份認(rèn)證(設(shè)置 Root 用戶密碼)
  • 使用非默認(rèn)端口(通過(guò) -p 映射)
  • 將密碼通過(guò)環(huán)境變量或 Docker Secrets 注入,避免寫(xiě)死在鏡像中
  • 定期執(zhí)行 docker exec <container> mongodump 備份數(shù)據(jù)
  • 考慮使用 TLS/SSL 加密客戶端與服務(wù)端通信(需掛載證書(shū)文件)

8. 備份與恢復(fù)

8.1 數(shù)據(jù)備份(mongodump)

# 進(jìn)入容器執(zhí)行備份
docker exec mongodb mongodump --out /data/db/backup

# 將備份文件復(fù)制到宿主機(jī)
docker cp mongodb:/data/db/backup ./mongodb_backup

備份文件默認(rèn)生成在 dump 目錄下,包含 BSON 格式的數(shù)據(jù)文件。

8.2 數(shù)據(jù)恢復(fù)(mongorestore)

# 將備份文件復(fù)制到容器
docker cp ./mongodb_backup mongodb:/data/db/backup

# 進(jìn)入容器執(zhí)行恢復(fù)
docker exec mongodb mongorestore /data/db/backup

定期備份腳本:可將上述命令寫(xiě)成定時(shí)任務(wù)(cron job),每日自動(dòng)備份,并將備份文件同步到遠(yuǎn)程存儲(chǔ)。

9. 副本集(Replica Set)集群搭建(進(jìn)階)

對(duì)于需要高可用的生產(chǎn)環(huán)境,單節(jié)點(diǎn) MongoDB 存在單點(diǎn)故障風(fēng)險(xiǎn)。副本集(Replica Set)是有自動(dòng)故障恢復(fù)功能的主從集群,包含一個(gè) Primary 節(jié)點(diǎn)和一個(gè)或多個(gè) Secondary 節(jié)點(diǎn),主節(jié)點(diǎn)故障時(shí)集群會(huì)自動(dòng)選舉新主節(jié)點(diǎn)。

使用 Docker Compose 搭建一主兩從副本集的完整配置如下:

version: '3.8'
services:
  mongo-primary:
    image: mongo:7.0
    container_name: mongo-primary
    command: ["--replSet", "rs0", "--bind_ip_all"]
    ports:
      - "27017:27017"
    volumes:
      - mongo_primary_data:/data/db
    networks:
      - mongo_cluster
  mongo-secondary-1:
    image: mongo:7.0
    container_name: mongo-secondary-1
    command: ["--replSet", "rs0", "--bind_ip_all"]
    ports:
      - "27018:27017"
    volumes:
      - mongo_secondary1_data:/data/db
    networks:
      - mongo_cluster
    depends_on:
      - mongo-primary
  mongo-secondary-2:
    image: mongo:7.0
    container_name: mongo-secondary-2
    command: ["--replSet", "rs0", "--bind_ip_all"]
    ports:
      - "27019:27017"]
    volumes:
      - mongo_secondary2_data:/data/db
    networks:
      - mongo_cluster
    depends_on:
      - mongo-primary
networks:
  mongo_cluster:
    driver: bridge
volumes:
  mongo_primary_data:
  mongo_secondary1_data:
  mongo_secondary2_data:

9.1 初始化副本集

容器啟動(dòng)后,需要手動(dòng)執(zhí)行初始化命令:

# 進(jìn)入主節(jié)點(diǎn)容器
docker exec -it mongo-primary mongosh

# 在 MongoDB Shell 中執(zhí)行
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongo-primary:27017" },
    { _id: 1, host: "mongo-secondary-1:27017" },
    { _id: 2, host: "mongo-secondary-2:27017" }
  ]
})

初始化后,可通過(guò) rs.status() 查看集群狀態(tài)。當(dāng)主節(jié)點(diǎn)故障時(shí),剩余節(jié)點(diǎn)會(huì)自動(dòng)選舉新的 Primary,實(shí)現(xiàn)高可用。

10. 常見(jiàn)問(wèn)題排查

問(wèn)題原因解決方案
容器啟動(dòng)失敗,日志顯示 permission denied宿主機(jī)掛載目錄權(quán)限不足使用命名卷而非綁定掛載,或手動(dòng)設(shè)置目錄權(quán)限
MONGO_INITDB_ROOT_USERNAME 環(huán)境變量不生效數(shù)據(jù)目錄非空時(shí)不會(huì)觸發(fā)初始化刪除數(shù)據(jù)卷后重新創(chuàng)建:docker-compose down -v
MongoDB 連接超時(shí)或拒絕連接端口映射錯(cuò)誤或容器未就緒檢查 docker ps 確認(rèn)容器狀態(tài),配合健康檢查確保服務(wù)完全啟動(dòng)
副本集節(jié)點(diǎn)無(wú)法加入集群容器間網(wǎng)絡(luò)不通或 bind_ip 配置錯(cuò)誤確保所有容器在同一 Docker 網(wǎng)絡(luò),且 command 中設(shè)置了 --bind_ip_all

11. 總結(jié)

通過(guò)本文,你應(yīng)該已經(jīng)掌握了 Docker 部署 MongoDB 的核心技能。核心回顧:

  • 數(shù)據(jù)持久化:區(qū)分綁定掛載(Bind Mount)和命名卷(Named Volume),生產(chǎn)環(huán)境優(yōu)先選擇命名卷
  • 用戶認(rèn)證:務(wù)必同時(shí)設(shè)置 MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD,兩個(gè)變量缺一不可
  • 資源管理:同時(shí)限制容器內(nèi)存和 WiredTiger 緩存,緩存大小建議為容器內(nèi)存的 50%–60%
  • 自動(dòng)化部署:使用 Docker Compose + 初始化腳本,實(shí)現(xiàn)一鍵啟動(dòng)和數(shù)據(jù)庫(kù)初始化
  • 高可用:副本集(Replica Set)主從集群實(shí)現(xiàn)自動(dòng)故障轉(zhuǎn)移

Docker 容器化部署讓 MongoDB 變得前所未有的輕量和可移植,無(wú)論是開(kāi)發(fā)測(cè)試環(huán)境還是生產(chǎn)環(huán)境,都能快速交付一致可靠的數(shù)據(jù)庫(kù)服務(wù)。

以上就是從零搭建到生產(chǎn)環(huán)境配置詳解Docker部署MongoDB的完整流程的詳細(xì)內(nèi)容,更多關(guān)于Docker部署MongoDB的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn)

    jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn)

    在日常開(kāi)發(fā)中,往往可能同時(shí)多個(gè)項(xiàng)目并行進(jìn)行開(kāi)發(fā),本文介紹了jenkins+gitlab+nginx部署前端應(yīng)用實(shí)現(xiàn),感興趣的可以了解一下
    2021-05-05
  • docker-compose集成Jenkins部署,打包,發(fā)布方式

    docker-compose集成Jenkins部署,打包,發(fā)布方式

    在Docker環(huán)境中安裝配置Jenkins,需掛載JDK、Maven等至容器指定路徑,設(shè)置國(guó)內(nèi)鏡像提升下載速度,并添加插件與憑據(jù)完成環(huán)境配置
    2024-10-10
  • docker create命令的用法說(shuō)明

    docker create命令的用法說(shuō)明

    這篇文章主要介紹了docker create命令的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Docker load命令進(jìn)行鏡像恢復(fù)與遷移的完整指南

    Docker load命令進(jìn)行鏡像恢復(fù)與遷移的完整指南

    docker load 是 Docker 鏡像生命周期管理的關(guān)鍵命令,它與 docker save 配合實(shí)現(xiàn)鏡像的離線遷移和環(huán)境復(fù)制,是企業(yè)級(jí)容器化部署的基礎(chǔ)工具,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2025-09-09
  • 詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境

    詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了詳解用Docker搭建Laravel和Vue項(xiàng)目的開(kāi)發(fā)環(huán)境,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Docker創(chuàng)建MongoDB容器并添加root密碼驗(yàn)證與更多用戶詳細(xì)步驟

    Docker創(chuàng)建MongoDB容器并添加root密碼驗(yàn)證與更多用戶詳細(xì)步驟

    MongoDB是一個(gè)著名的面向文檔的數(shù)據(jù)庫(kù),被許多現(xiàn)代Web應(yīng)用程序使用,下面這篇文章主要給大家介紹了關(guān)于Docker創(chuàng)建MongoDB容器并添加root密碼驗(yàn)證與更多用戶的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • rocketmq-streams的ILeaseService使用示例詳解

    rocketmq-streams的ILeaseService使用示例詳解

    這篇文章主要為大家介紹了rocketmq-streams的ILeaseService使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Docker訪問(wèn)容器中的Spring Boot日志的幾種方法

    Docker訪問(wèn)容器中的Spring Boot日志的幾種方法

    在本文中,我們將演示如何在Docker容器中訪問(wèn)Spring Boot日志,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • Docker Compose容器編排深度解析與實(shí)戰(zhàn)小結(jié)

    Docker Compose容器編排深度解析與實(shí)戰(zhàn)小結(jié)

    Docker Compose 是 Docker 官方推出的開(kāi)源項(xiàng)目,用于定義和運(yùn)行多個(gè) Docker 容器的應(yīng)用工具,簡(jiǎn)化了多容器應(yīng)用的部署和管理,本文介紹Docker Compose:容器編排深度解析與實(shí)戰(zhàn)指南,感興趣的朋友一起看看吧
    2025-12-12
  • Docker如何實(shí)現(xiàn)離線安裝

    Docker如何實(shí)現(xiàn)離線安裝

    文章介紹了如何在離線環(huán)境中安裝Docker,并將其注冊(cè)為系統(tǒng)服務(wù),主要內(nèi)容包括下載Docker二進(jìn)制文件、上傳到服務(wù)器、解壓安裝包、配置系統(tǒng)服務(wù)以及驗(yàn)證安裝是否成功
    2024-11-11

最新評(píng)論

漳平市| 龙江县| 桑日县| 贺兰县| 南川市| 屯门区| 加查县| 平武县| 井陉县| 平罗县| 元阳县| 吴堡县| 青海省| 资中县| 广昌县| 综艺| 成安县| 嫩江县| 积石山| 璧山县| 文安县| 钟山县| 酉阳| 上犹县| 综艺| 鲜城| 卫辉市| 永昌县| 夏河县| 满城县| 厦门市| 建阳市| 正定县| 容城县| 彰化市| 招远市| 云梦县| 额尔古纳市| 开鲁县| 论坛| 分宜县|