logo

MongoDB在Linux下通过docker-compose的安装及初始化全攻略

作者:菠萝爱吃肉2025.10.13 17:42浏览量:126

简介:本文详细介绍在Linux环境下使用docker-compose快速部署MongoDB数据库的方法,包含安装前准备、docker-compose.yml配置详解、服务启动与验证、初始化配置及常见问题解决方案。

MongoDB在Linux下通过docker-compose的安装及初始化全攻略

一、环境准备与前置条件

1.1 系统要求验证

在部署MongoDB前需确认Linux系统满足以下条件:

  • 内核版本:建议使用Linux 4.x及以上版本(通过uname -r查看)
  • Docker版本:Docker Engine 20.10+(通过docker --version验证)
  • 磁盘空间:至少预留10GB可用空间(通过df -h /var/lib/docker检查)
  • 内存资源:生产环境建议配置4GB+内存,开发环境可适当降低

1.2 依赖工具安装

  1. # 安装docker-compose(以Ubuntu为例)
  2. sudo apt update
  3. sudo apt install -y docker-compose
  4. # 验证安装
  5. docker-compose --version
  6. # 预期输出:docker-compose version 1.29.2, build 5becea4c

1.3 目录结构规划

建议创建专用工作目录:

  1. mkdir ~/mongodb-docker && cd ~/mongodb-docker
  2. mkdir -p data/db # 数据库文件存储
  3. mkdir -p data/configdb # 配置文件存储

二、docker-compose配置详解

2.1 基础配置文件

创建docker-compose.yml文件,核心配置如下:

  1. version: '3.8'
  2. services:
  3. mongodb:
  4. image: mongo:6.0
  5. container_name: mongodb
  6. restart: unless-stopped
  7. environment:
  8. MONGO_INITDB_ROOT_USERNAME: admin
  9. MONGO_INITDB_ROOT_PASSWORD: securepassword
  10. MONGO_INITDB_DATABASE: admin
  11. ports:
  12. - "27017:27017"
  13. volumes:
  14. - ./data/db:/data/db
  15. - ./data/configdb:/data/configdb
  16. command: [--auth]

2.2 配置参数解析

参数 作用说明 推荐值
image 指定MongoDB镜像版本 推荐使用LTS版本(如6.0)
restart 容器重启策略 unless-stopped适合生产环境
environment 环境变量配置 必须设置root用户凭证
volumes 数据持久化配置 必须映射数据库目录
command 启动参数 --auth启用认证模式

2.3 高级配置选项

对于生产环境,建议添加以下配置:

  1. services:
  2. mongodb:
  3. # ...其他配置...
  4. ulimits:
  5. nproc: 65535
  6. nofile:
  7. soft: 65535
  8. hard: 65535
  9. sysctls:
  10. - net.ipv4.tcp_keepalive_time=120
  11. logging:
  12. driver: "json-file"
  13. options:
  14. max-size: "10m"
  15. max-file: "3"

三、服务部署与验证

3.1 启动流程

  1. # 首次启动(后台模式)
  2. docker-compose up -d
  3. # 查看运行状态
  4. docker-compose ps
  5. # 预期输出:
  6. # Name Command State Ports
  7. # mongodb docker-entrypoint.sh --auth Up 0.0.0.0:27017->27017/tcp

3.2 连接验证

  1. # 使用mongo shell连接
  2. docker exec -it mongodb mongosh -u admin -p securepassword --authenticationDatabase admin
  3. # 验证数据库列表
  4. > show dbs
  5. admin 0.000GB
  6. config 0.000GB
  7. local 0.000GB

3.3 日志查看

  1. # 实时日志
  2. docker-compose logs -f
  3. # 错误排查示例
  4. # 若出现"Permission denied"错误,检查数据目录权限:
  5. sudo chown -R 999:999 ./data/db

四、初始化配置指南

4.1 创建应用用户

  1. // 在admin数据库中执行
  2. use admin
  3. db.createUser({
  4. user: "appuser",
  5. pwd: "appsecurepassword",
  6. roles: [
  7. { role: "readWrite", db: "appdb" },
  8. { role: "dbAdmin", db: "appdb" }
  9. ]
  10. })

4.2 配置副本集(高可用)

修改docker-compose.yml

  1. services:
  2. mongodb:
  3. command: ["--replSet", "rs0", "--auth"]
  4. # ...其他配置...

初始化副本集:

  1. docker exec -it mongodb mongosh -u admin -p securepassword --authenticationDatabase admin
  2. > rs.initiate({
  3. _id: "rs0",
  4. members: [
  5. { _id: 0, host: "localhost:27017" }
  6. ]
  7. })

4.3 安全加固建议

  1. 网络隔离:限制27017端口访问

    1. networks:
    2. mongonet:
    3. driver: bridge
    4. ipam:
    5. config:
    6. - subnet: 172.20.0.0/16
    7. # 在service中添加
    8. networks:
    9. - mongonet
  2. TLS加密:配置SSL证书

    1. volumes:
    2. - ./certs:/etc/ssl/certs
    3. command: [
    4. "--sslMode", "requireSSL",
    5. "--sslPEMKeyFile", "/etc/ssl/certs/mongodb.pem",
    6. "--sslCAFile", "/etc/ssl/certs/ca.pem",
    7. "--auth"
    8. ]

五、常见问题解决方案

5.1 启动失败排查

现象:容器启动后立即退出
解决方案

  1. 检查日志:docker-compose logs mongodb
  2. 验证数据目录权限:
    1. ls -ld ./data/db
    2. # 应显示:drwxr-xr-x 2 999 999 4096 Jun 15 10:00 ./data/db

5.2 认证失败处理

错误信息Authentication failed
排查步骤

  1. 确认使用的认证数据库正确
  2. 检查用户角色权限:
    1. use admin
    2. db.getUser("appuser")

5.3 性能优化建议

  1. 内存配置

    1. environment:
    2. - MONGO_INITDB_ROOT_USERNAME=admin
    3. - MONGO_INITDB_ROOT_PASSWORD=securepassword
    4. - WiredTigerCacheSizeGB=2 # 分配2GB缓存
  2. 索引优化

    1. docker exec -it mongodb mongosh -u admin -p securepassword --authenticationDatabase admin
    2. > use appdb
    3. > db.collection.createIndex({ field: 1 }, { background: true })

六、维护与升级

6.1 数据备份方案

  1. # 创建备份容器
  2. docker run -it --rm \
  3. -v $(pwd)/backups:/backups \
  4. -v mongodb_data_volume:/data/db \
  5. mongo:6.0 \
  6. mongodump --out /backups --host mongodb --authenticationDatabase admin -u admin -p securepassword

6.2 版本升级流程

  1. 修改docker-compose.yml中的image版本
  2. 执行升级命令:
    1. docker-compose down
    2. docker-compose up -d
  3. 验证数据完整性:
    1. docker exec -it mongodb mongosh -u admin -p securepassword --authenticationDatabase admin --eval "db.adminCommand({listDatabases: 1})"

七、最佳实践总结

  1. 配置管理:使用.env文件管理敏感信息

    1. MONGO_ROOT_USER=admin
    2. MONGO_ROOT_PASS=securepassword
  2. 监控集成:配置Prometheus监控

    1. services:
    2. mongodb-exporter:
    3. image: percona/mongodb_exporter
    4. environment:
    5. - MONGODB_URI=mongodb://admin:securepassword@mongodb:27017/admin?authSource=admin
    6. ports:
    7. - "9216:9216"
  3. 灾备方案:配置定期快照

    1. # 每日凌晨2点备份
    2. 0 2 * * * /usr/bin/docker exec mongodb mongodump --out /backups/$(date +\%Y\%m\%d) --host localhost --authenticationDatabase admin -u admin -p securepassword

通过以上完整部署方案,开发者可以在Linux环境下快速构建安全、高可用的MongoDB服务。实际部署时建议先在测试环境验证所有配置,再迁移到生产环境。对于大型应用,可考虑使用MongoDB Atlas等云服务进行混合部署。

相关文章推荐

发表评论

活动