Docker 安装 MongoDB(超详细)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

前言:Docker 安装 MongoDB 的核心价值

在现代软件开发中,容器化技术已成为部署和管理应用程序的标配。Docker 安装 MongoDB 不仅简化了数据库的部署流程,还能通过标准化的环境配置,显著减少开发、测试和生产环境间的差异。对于编程初学者而言,这一组合能帮助快速搭建实验环境;而中级开发者则可借此实现更灵活的微服务架构设计。本文将从基础概念入手,逐步拆解安装步骤,并提供实用案例,确保读者能轻松掌握这一技能。


Docker:轻量级虚拟化技术的“集装箱”比喻

Docker 的核心思想可类比为“集装箱运输”。传统虚拟机如同将整栋建筑(操作系统和应用程序)装入大货柜,而 Docker 则将应用程序与依赖项打包成轻量级“集装箱”(容器),仅携带运行所需的最小资源。这种设计使得 Docker 容器启动速度快、资源占用低,且可跨平台无缝迁移。

Docker 的三大核心组件

组件功能描述形象比喻
镜像(Image)预定义的只读模板,如 MongoDB 镜像建筑设计图纸
容器(Container)运行中的实例,基于镜像启动正在运输的集装箱
仓库(Registry)存储和共享镜像的平台全球集装箱港口

MongoDB:灵活的文档型数据库

MongoDB 是一种 NoSQL 数据库,以 JSON 类似的文档格式存储数据,适合处理非结构化或动态数据场景。例如,用户信息可能包含地址、兴趣爱好等多类型字段,传统关系型数据库需要设计复杂表结构,而 MongoDB 可直接以文档形式存储。

MongoDB 的核心优势

  1. 灵活性:无需预定义数据结构,支持动态字段扩展。
  2. 高性能:基于内存存储和索引优化,适合高并发场景。
  3. 易扩展性:通过分片(Sharding)实现水平扩展。

安装步骤:从环境准备到容器运行

第一步:安装 Docker 环境

在开始前,需确保系统已安装 Docker。以 Ubuntu 为例,执行以下命令:

sudo apt-get update  

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common  

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -  
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"  

sudo apt-get update  
sudo apt-get install docker-ce  

安装完成后,通过 docker --version 验证版本。

第二步:拉取 MongoDB 镜像

Docker Hub 提供官方 MongoDB 镜像,可通过以下命令获取:

docker pull mongo:latest  

此命令会下载最新稳定版镜像。若需指定版本(如 6.0),可替换为 docker pull mongo:6.0.0

第三步:运行 MongoDB 容器

使用 docker run 命令启动容器,示例命令如下:

docker run \  
  --name mongodb-container \  # 容器名称  
  -d \                       # 后台运行  
  -p 27017:27017 \           # 端口映射:主机27017 → 容器27017  
  -v /data/mongo:/data/db \  # 挂载数据卷(持久化存储)  
  mongo:latest  

关键参数解释

  • -d:守护进程模式,确保容器在后台运行。
  • -p:端口映射,允许外部通过 localhost:27017 访问容器内 MongoDB。
  • -v:将主机目录 /data/mongo 挂载到容器的 /data/db,避免容器删除后数据丢失。

验证安装:连接与数据操作

第一步:连接 MongoDB Shell

通过以下命令进入容器内的 MongoDB Shell:

docker exec -it mongodb-container mongo  

成功连接后,会看到类似以下提示:

MongoDB shell version v6.0.0  
connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000  
Server has startup warnings:  
2023-01-01T12:34:56.789+0000 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'  
...  

第二步:创建测试数据库

在 MongoDB Shell 中执行以下命令:

// 创建数据库(test_db)和集合(users)  
use test_db  
db.users.insertOne({ name: "Alice", age: 30 })  

// 查询数据  
db.users.find().pretty()  

若输出类似以下内容,表示安装成功:

{ "_id" : ObjectId("63a..."), "name" : "Alice", "age" : 30 }  

高级配置:数据持久化与自定义设置

数据持久化的重要性

默认情况下,容器删除后其内部数据会丢失。通过挂载数据卷(-v 参数),可将 MongoDB 数据存储在宿主机上。例如,修改容器启动命令为:

docker run \  
  ...  
  -v $(pwd)/mongo-data:/data/db \  
  ...  

此命令将当前目录下的 mongo-data 文件夹映射到容器数据目录,确保数据持久化。

自定义配置文件

若需修改 MongoDB 配置(如调整日志级别或启用认证),可创建自定义配置文件 mongod.conf,并通过 -v 挂载到容器:

docker run \  
  ...  
  -v $(pwd)/mongod.conf:/etc/mongod.conf \  
  -e MONGO_INITDB_ROOT_USERNAME=admin \  
  -e MONGO_INITDB_ROOT_PASSWORD=secret \  
  mongo:latest --config /etc/mongod.conf  

此处通过环境变量 MONGO_INITDB_* 设置初始管理员账号,增强安全性。


常见问题与故障排除

问题1:端口冲突

若启动容器时提示 port is already allocated,可能是其他进程占用了 27017 端口。可通过以下命令检查并终止占用进程:

sudo lsof -i :27017  

sudo kill -9 1234  

问题2:数据目录权限错误

若容器启动后报错 exception in initAndListen: Location40301,可能是宿主机挂载目录权限不足。可通过以下命令调整权限:

sudo chown -R 999:999 /data/mongo  

注意:MongoDB 容器默认以用户 999 运行,需确保目录所有者匹配。


结论:Docker 安装 MongoDB 的实践价值

通过本文的分步指导,读者已掌握如何利用 Docker 快速部署 MongoDB,并实现数据持久化与高级配置。这一技能不仅简化了本地开发环境搭建,也为后续微服务架构设计、自动化测试等场景奠定了基础。未来,随着对容器编排工具(如 Kubernetes)的深入学习,开发者可进一步扩展 MongoDB 的集群部署与高可用方案。

实践建议:尝试将本文示例代码应用于实际项目,例如搭建一个包含 MongoDB 的全栈应用,并通过 docker-compose 实现多服务联动。通过不断实践,容器化部署的复杂性将逐渐转化为开发效率的提升。

最新发布