在 Docker 中安装 MongoDB 非常简单。以下是详细的步骤和一些常用命令
拉取 MongoDB 镜像
打开终端或命令提示符,输入以下命令来从 Docker Hub 拉取 MongoDB 官方镜像。如果您不指定版本,它会默认拉取最新稳定版。
docker pull mongo如果您想指定一个特定版本(例如 4.4 或 5.0),可以使用:
docker pull mongo:4.4
# 或者
docker pull mongo:5.0运行MongoDB 容器
这是最关键的一步。我们通常会创建一个持久化存储来保存 MongoDB 的数据,以防止容器删除时数据丢失。
推荐方式:使用Docker 卷进行持久化存储
绑定挂载 (Bind Mounts) vs Docker Volume
创建一个 Docker 卷来存储 MongoDB 的数据,这是最佳实践。
docker volume create mongodb_data然后,运行 MongoDB 容器,将数据卷挂载到容器内的 /data/db 目录。我们还会指定端口映射(将容器的 27017 端口映射到主机的 27017 端口),并给容器一个易于识别的名称(mymongo)。使用 -d 参数让容器在后台运行。
docker run -d \
--name mymongo \
-p 27017:27017 \
-v mongodb_data:/data/db \
mongo命令解释:
-d: 后台运行容器。--name mymongo: 给容器指定一个名称,方便后续管理(例如docker stop mymongo)。-p 27017:27017: 将主机的 27017 端口映射到容器的 27017 端口。MongoDB 默认监听 27017 端口。-v mongodb_data:/data/db: 创建并挂载一个名为mongodb_data的 Docker 卷到容器内部的/data/db目录。MongoDB 默认将数据存储在该目录下。mongo: 使用mongo镜像来创建容器。
可选方式:使用本地目录进行持久化存储
如果您想将 MongoDB 数据直接存储在主机文件系统的特定目录下,可以使用绑定挂载 (Bind Mount)。
# 首先确保您的主机上存在这个目录,例如:
# mkdir -p /path/to/your/mongodb/data
docker run -d \
--name mymongo \
-p 27017:27017 \
-v /path/to/your/mongodb/data:/data/db \
mongo请注意: 将 /path/to/your/mongodb/data 替换为您主机上实际的目录路径。
验证 MongoDB 是否运行
-
检查容器状态:
docker ps您应该能看到
mymongo容器正在运行,并且端口映射正确。 -
查看容器日志:
docker logs mymongo您应该能看到 MongoDB 启动日志,其中包含类似
Waiting for connections的信息。 -
进入容器内部进行测试 (可选):
docker exec -it mymongo mongosh # 或者对于旧版本 MongoDB (小于 5.0),使用 mongo shell: # docker exec -it mymongo mongo这会进入 MongoDB 的 shell。您可以在这里尝试一些命令,例如
show dbs。要退出 shell,输入
exit或按Ctrl+D。
连接到 MongoDB
现在,您的 MongoDB 实例已经在 Docker 中运行,并且可以通过主机的 27017 端口访问。
您可以使用任何 MongoDB 客户端工具(如 mongosh、Compass、Robo 3T 或编程语言的驱动程序)连接到它。
连接字符串示例:
- 本地连接:
mongodb://localhost:27017 - 在其他 Docker 容器中连接 (使用 Docker 网络): 如果您的应用程序在另一个 Docker 容器中,并且这两个容器在同一个 Docker 网络中,您可以使用容器名称作为主机名。 例如,如果您的应用容器与
mymongo容器在默认的bridge网络中:mongodb://mymongo:27017
MongoDB 配置 (可选)
如果您需要自定义 MongoDB 的配置(例如认证、副本集等),可以通过挂载配置文件来实现。
- 创建配置文件 (例如
mongo.conf):# mongo.conf # 例如,启用认证 security: authorization: "enabled" - 挂载配置文件并启动容器:
这里的docker run -d \ --name mymongo \ -p 27017:27017 \ -v mongodb_data:/data/db \ -v /path/to/your/mongo.conf:/etc/mongo/mongod.conf:ro \ mongo mongod -f /etc/mongo/mongod.conf-v /path/to/your/mongo.conf:/etc/mongo/mongod.conf:ro将主机上的配置文件挂载到容器内部,并使用mongod -f /etc/mongo/mongod.conf命令来指定使用这个配置文件启动 MongoDB。ro表示只读。