docker-compose 配置启动2个MongoDB

要将原配置扩展为启动两个独立的MongoDB容器,需要分别定义两个服务,每个服务使用不同的名称、端口、卷路径、环境变量和容器名称以避免冲突。以下是修改后的docker-compose.yml

version: '3'
services:
  # 第一个MongoDB服务
  mongo1:  # 服务名称改为mongo1
    image: mongo
    container_name: mongo_instance1  # 唯一容器名称
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin_user1  # 建议使用不同用户名
      MONGO_INITDB_ROOT_PASSWORD: secure_pass1  # 建议使用不同密码
    volumes:
      - /mnt/mongodb/data1:/data/db         # 数据目录1
      - /mnt/mongodb/backup1:/data/backup   # 备份目录1
    ports:
      - "27017:27017"  # 暴露到宿主机的端口(确保无冲突)
    command: ["--auth"]

  # 第二个MongoDB服务(在原mongo2基础上修改)
  mongo2:  
    image: mongo
    container_name: mongo_instance2  # 唯一容器名称
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: admin_user2  # 不同用户名
      MONGO_INITDB_ROOT_PASSWORD: secure_pass2  # 不同密码
    volumes:
      - /mnt/mongodb/data2:/data/db         # 原配置的数据目录
      - /mnt/mongodb/backup2:/data/backup   # 原配置的备份目录
    ports:
      - "27018:27017"  # 保持原宿主机端口27018
    command: ["--auth"]

关键修改说明:

  1. 服务分离

    • 创建两个独立服务 mongo1mongo2
    • 每个服务拥有唯一的container_namemongo_instance1mongo_instance2
  2. 避免端口冲突

    • mongo1 使用宿主机端口 27017 → 容器端口 27017
    • mongo2 保持原宿主机端口 27018 → 容器端口 27017
  3. 独立存储卷

    • 为每个容器分配独立的数据目录(/mnt/mongodb/data1/data2
    • 独立备份目录(/mnt/mongodb/backup1/backup2
  4. 安全隔离

    • 为每个实例设置不同的用户名密码(避免权限交叉)

启动命令:

docker-compose up -d  # 同时启动两个容器

连接示例:

  • 连接第一个MongoDB:
    mongodb://admin_user1:secure_pass1@localhost:27017
  • 连接第二个MongoDB:
    mongodb://admin_user2:secure_pass2@localhost:27018

⚠️ 重要:确保宿主机目录(如/mnt/mongodb/data1)已提前创建且权限正确(chmod 757),否则容器可能无法启动。

### 使用 Docker Compose 部署 MongoDB 的最佳实践 #### 准备工作环境 为了确保顺利部署,建议先准备好必要的文件结构和配置。可以参照如下方式创建项目目录以及子目录用于存储数据、日志和配置文件: ```bash mkdir -p /opt/docker-data/mongodb/{data,log,config} chmod -R 777 /opt/docker-data/mongodb/ ``` 上述命令会创建三个主要的挂载点来保存持久化数据、日志记录及自定义配置[^3]。 #### 编写 `docker-compose.yml` 文件 编写一个合适的 `docker-compose.yml` 文件对于成功搭建 MongoDB 至关重要。下面是一个简单的单实例 MongoDB 设置例子: ```yaml version: '3' services: mongodb: image: mongo:latest container_name: mongodb_container environment: MONGO_INITDB_ROOT_USERNAME: adminUser MONGO_INITDB_ROOT_PASSWORD: examplePassword ports: - "27017:27017" volumes: - /opt/docker-data/mongodb/data:/data/db - /opt/docker-data/mongodb/log:/var/log/mongodb - /opt/docker-data/mongodb/config:/etc/mongoconf command: mongod --auth --bind_ip_all restart: always ``` 此配置指定了镜像版本、容器名称、初始化用户名密码等参数,并通过 `-v` 参数实现了主机与容器间的卷映射以便于数据持久化和管理[^2]。 #### 创建启动脚本 (可选) 虽然可以直接利用 `docker-compose up -d` 来启动服务,但如果希望进一步简化操作流程或加入额外逻辑处理(比如自动创建所需目录),则可以考虑准备一个 Bash 脚本来辅助完成这些任务。例如名为 `start_mongodb.sh` 的脚本可能看起来像这样: ```bash #!/bin/bash # 自动创建所需的本地路径 if [ ! -d "/opt/docker-data/mongodb/data" ]; then mkdir -p /opt/docker-data/mongodb/data && chmod -R 777 /opt/docker-data/mongodb/data fi if [ ! -d "/opt/docker-data/mongodb/log" ]; then mkdir -p /opt/docker-data/mongodb/log && chmod -R 777 /opt/docker-data/mongodb/log fi if [ ! -d "/opt/docker-data/mongodb/config" ]; then mkdir -R 777 /opt/docker-data/mongodb/config fi # 启动MongoDB服务 cd $(dirname $0) && docker-compose up -d ``` 这个脚本会在首次运行前检查并建立必要目录,之后调用 `docker-compose` 命令以守护进程模式启动应用[^4]。 #### 执行部署过程 当一切就绪后,在包含 `docker-compose.yml` 和其他资源文件的同一目录下执行以下指令即可快速启动 MongoDB 实例: ```bash sh start_mongodb.sh ``` 或者直接使用 `docker-compose` 工具链中的命令来进行控制: - **启动**:`docker-compose -f docker-compose.yml up -d` - **重启**:`docker-compose -f docker-compose.yml restart` - **停止**:`docker-compose -f docker-compose.yml stop` - **删除容器**:`docker-compose -f docker-compose.yml rm` 以上方法适用于大多数场景下的 MongoDB 单机版安装;而对于更复杂的多节点集群架构,则需按照官方文档调整相应的网络策略和服务发现机制[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值