当前位置: 首页 > news >正文

Docker 安装 MongoDB 完整指南:从入门到实战

前言

在当今的软件开发中,容器化技术已经成为不可或缺的一部分。Docker 作为容器化的代表,让应用的部署和管理变得前所未有的简单。对于数据库而言,使用 Docker 可以快速创建隔离的环境,避免复杂的安装配置过程。本文将详细介绍如何使用 Docker 安装和配置 MongoDB。

什么是 MongoDB?

MongoDB 是一个流行的开源 NoSQL 数据库,采用文档型数据存储模式,具有高性能、高可用性和易扩展等特点。它使用类似 JSON 的 BSON 格式存储数据,非常适合现代 Web 应用开发。

环境准备

在开始之前,请确保您的系统已经安装了 Docker:

bash

# 检查 Docker 是否安装
docker --version# 检查 Docker 服务状态
docker info

如果尚未安装 Docker,请参考 官方文档 进行安装。

安装 MongoDB

1. 拉取 MongoDB 镜像

首先,我们从 Docker Hub 拉取官方的 MongoDB 镜像:

bash

# 拉取最新版本的 MongoDB
docker pull mongo:latest# 或者拉取特定版本(推荐)
docker pull mongo:6.0# 查看已下载的镜像
docker images

2. 运行 MongoDB 容器

基础运行方式

bash

# 最简单的运行方式
docker run -d --name mongodb -p 27017:27017 mongo:latest

这个命令会:

  • -d:在后台运行容器

  • --name mongodb:为容器指定名称

  • -p 27017:27017:将容器的 27017 端口映射到主机的 27017 端口

推荐的生产环境配置

bash

# 创建数据持久化目录
mkdir -p /home/docker/mongodb/data
mkdir -p /home/docker/mongodb/log# 运行 MongoDB 容器(推荐配置)
docker run -d \--name mongodb \--restart always \-p 27017:27017 \-v /home/docker/mongodb/data:/data/db \-v /home/docker/mongodb/log:/var/log/mongodb \-e MONGO_INITDB_ROOT_USERNAME=admin \-e MONGO_INITDB_ROOT_PASSWORD=123456 \mongo:latest

参数说明:

  • --restart always:容器退出时自动重启

  • -v:挂载数据卷,实现数据持久化

  • -e:设置环境变量,这里设置了管理员账号和密码

3. 验证安装

检查容器是否正常运行:

bash

# 查看容器状态
docker ps# 查看容器日志
docker logs mongodb

如果看到类似下面的输出,说明 MongoDB 已经成功启动:

text

{"t":{"$date":"2023-07-01T10:00:00.000+00:00"},"s":"I",  "c":"NETWORK",  "id":23016,   "ctx":"listener","msg":"Waiting for connections","attr":{"port":27017,"ssl":"off"}}

连接 MongoDB

1. 使用命令行连接

bash

# 进入容器内部的 MongoDB Shell
docker exec -it mongodb mongosh# 或者使用认证方式连接
docker exec -it mongodb mongosh -u admin -p 123456 --authenticationDatabase admin

2. 使用 GUI 工具连接

推荐使用 MongoDB Compass 或 NoSQLBooster 等图形化工具连接:

  • 连接地址:localhost:27017

  • 认证数据库:admin

  • 用户名:admin

  • 密码:123456

3. 基本操作测试

在 MongoDB Shell 中尝试以下操作:

javascript

// 显示数据库
show dbs// 切换到 admin 数据库
use admin// 创建新数据库
use myapp// 创建集合并插入数据
db.users.insertOne({name: "张三",age: 25,email: "zhangsan@example.com",created_at: new Date()
})// 查询数据
db.users.find()// 创建索引
db.users.createIndex({ email: 1 }, { unique: true })

高级配置

1. 使用 Docker Compose 部署

创建 docker-compose.yml 文件:

yaml

version: '3.8'services:mongodb:image: mongo:6.0container_name: mongodbrestart: alwaysports:- "27017:27017"environment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: 123456MONGO_INITDB_DATABASE: myappvolumes:- ./data/db:/data/db- ./data/log:/var/log/mongodb- ./init:/docker-entrypoint-initdb.dnetworks:- mongo-networkmongo-express:image: mongo-expresscontainer_name: mongo-expressrestart: alwaysports:- "8081:8081"environment:ME_CONFIG_MONGODB_ADMINUSERNAME: adminME_CONFIG_MONGODB_ADMINPASSWORD: 123456ME_CONFIG_MONGODB_URL: mongodb://admin:123456@mongodb:27017/networks:- mongo-networknetworks:mongo-network:driver: bridge

启动服务:

bash

# 启动服务
docker-compose up -d# 查看服务状态
docker-compose ps# 停止服务
docker-compose down

2. 初始化脚本

创建初始化脚本 init/init.js

javascript

// 初始化数据库和用户
db = db.getSiblingDB('myapp');// 创建应用专用用户
db.createUser({user: 'appuser',pwd: 'apppassword',roles: [{role: 'readWrite',db: 'myapp'}]
});// 创建示例集合和数据
db.products.insertMany([{name: '笔记本电脑',price: 5999,category: '电子产品',in_stock: true,created_at: new Date()},{name: '无线鼠标',price: 129,category: '电子产品',in_stock: true,created_at: new Date()}
]);// 创建索引
db.products.createIndex({ name: 1 });
db.products.createIndex({ category: 1, price: 1 });

3. 配置文件挂载

创建自定义配置文件 mongod.conf

yaml

# MongoDB 配置文件
storage:dbPath: /data/dbjournal:enabled: truesystemLog:destination: filelogAppend: truepath: /var/log/mongodb/mongod.lognet:port: 27017bindIp: 0.0.0.0security:authorization: enabled

更新 docker-compose.yml 挂载配置文件:

yaml

volumes:- ./data/db:/data/db- ./data/log:/var/log/mongodb- ./mongod.conf:/etc/mongod.conf- ./init:/docker-entrypoint-initdb.dcommand: ["--config", "/etc/mongod.conf"]

数据备份与恢复

1. 备份数据库

bash

# 备份单个数据库
docker exec mongodb mongodump -u admin -p 123456 --authenticationDatabase admin --db myapp --out /backup/$(date +%Y%m%d)# 备份所有数据库
docker exec mongodb mongodump -u admin -p 123456 --authenticationDatabase admin --out /backup/full_backup_$(date +%Y%m%d)# 将备份文件从容器复制到主机
docker cp mongodb:/backup ./backup

2. 恢复数据库

bash

# 将备份文件复制到容器
docker cp ./backup/full_backup_20230701 mongodb:/backup/# 恢复数据库
docker exec mongodb mongorestore -u admin -p 123456 --authenticationDatabase admin /backup/full_backup_20230701

常见问题排查

1. 连接失败

bash

# 检查容器状态
docker ps -a# 查看容器日志
docker logs mongodb# 检查端口占用
netstat -tulpn | grep 27017# 进入容器检查服务
docker exec -it mongodb bash
mongosh -u admin -p 123456

2. 权限问题

bash

# 如果没有设置认证,可以临时进入容器修改
docker exec -it mongodb mongosh# 在 MongoDB Shell 中创建用户
use admin
db.createUser({user: 'admin',pwd: '123456',roles: ['root']
})

3. 数据持久化问题

bash

# 检查卷挂载
docker volume ls# 检查数据目录权限
ls -la /home/docker/mongodb/data# 备份重要数据后再进行操作

最佳实践建议

  1. 安全配置

    • 始终启用认证

    • 使用强密码

    • 限制网络访问

    • 定期更新镜像版本

  2. 性能优化

    • 为数据目录使用 SSD 存储

    • 适当配置内存限制

    • 使用副本集提高可用性

  3. 监控维护

    • 定期备份数据

    • 监控日志文件

    • 设置资源使用限制

总结

通过 Docker 安装 MongoDB 不仅简化了部署过程,还提供了良好的环境隔离和数据持久化方案。本文介绍了从基础安装到生产环境配置的完整流程,包括:

  • MongoDB 镜像的拉取和容器运行

  • 数据持久化和权限配置

  • Docker Compose 编排部署

  • 数据备份恢复策略

  • 常见问题排查方法

希望这篇指南能帮助您快速上手使用 Docker 部署 MongoDB。在实际生产环境中,建议根据具体需求进一步配置副本集、分片集群等高级特性。

http://www.dtcms.com/a/523537.html

相关文章:

  • Docker 离线安装
  • CUDA和cuDNN安装
  • 一篇初识什么是容器,引出 Docker
  • HTML 理论笔记
  • 《Linux系统编程之入门基础》【权限管理】
  • ELK(Elasticsearch + Logstash + Kibana + Filebeat)采集方案
  • 网站建设金手指排名霸屏主机类型wordpress
  • uniapp微信小程序简单表格展示
  • 【html】每日打卡页面
  • Server 15 ,VMware ESXi 实战指南:Ubuntu 20.04.6 版本虚拟机静态 IP 配置、分辨率固定及远程访问实践
  • 吴恩达深度学习课程一:神经网络和深度学习 第三周:浅层神经网络(三)
  • Copilot使用体验
  • uniapp video 加载完成后全屏播放
  • 从MongoDB到国产数据库:一场2TB电子证照系统的“平滑着陆”实践
  • 电子商务网站开发与建设试卷wordpress如何删除已安装主题
  • 内蒙古城乡建设网站免费详情页模板网站
  • Android EDLA开发认证说明和开发流程
  • DevExpress WPF中文教程:Data Grid - 如何使用虚拟源?(三)
  • UniApp缓存系统详解
  • 【LLM】用 FastAPI 搭建「OpenAI 兼容」DeepSeek-OCR 服务 + 简洁WebUI
  • 企业内部SRE/DevOps向精通Linux课程培训大纲
  • 《Effective Java》第13条:谨慎的覆盖clone
  • 第一章、React + TypeScript + Webpack项目构建
  • 前端:金丝雀部署(Canary Deployment)/ A、B部署 / 灰度部署
  • Spark微博舆情分析系统 情感分析 爬虫 Hadoop和Hive 贴吧数据 双平台 讲解视频 大数据 Hadoop ✅
  • 宁波公司网站建设价格dw建设手机网站
  • 长沙做网站价格有哪些网站可以做青旅义工
  • 怎么查看网站打开速度企业网站用vps还是虚拟主机
  • Vue3 模板引用——ref
  • XGBoost完整学习指南:从数据清洗到模型调参