在 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 是否运行

  1. 检查容器状态:

    docker ps

    您应该能看到 mymongo 容器正在运行,并且端口映射正确。

  2. 查看容器日志:

    docker logs mymongo

    您应该能看到 MongoDB 启动日志,其中包含类似 Waiting for connections 的信息。

  3. 进入容器内部进行测试 (可选):

    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 的配置(例如认证、副本集等),可以通过挂载配置文件来实现。

  1. 创建配置文件 (例如 mongo.conf):
    # mongo.conf
    # 例如,启用认证
    security:
      authorization: "enabled"
  2. 挂载配置文件并启动容器:
    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 表示只读。

相关链接