Docker Compose 搭建 MongoDB 环境 – wiki大全


使用 Docker Compose 快速搭建 MongoDB 环境

在现代软件开发中,数据库是不可或缺的一部分。MongoDB 作为一种流行的 NoSQL 数据库,以其灵活性和可伸缩性受到广泛欢迎。而 Docker Compose 作为一个用于定义和运行多容器 Docker 应用程序的工具,能够极大地简化复杂服务(如数据库)的部署和管理。本文将详细介绍如何利用 Docker Compose 快速、高效地搭建一个 MongoDB 环境。

为什么选择 Docker Compose 搭建 MongoDB?

  1. 环境隔离: MongoDB 实例运行在独立的 Docker 容器中,与其他系统服务完全隔离,避免了版本冲突和环境污染。
  2. 易于部署: 通过一个简单的 docker-compose.yml 文件,你可以定义 MongoDB 及其所有配置,实现“一键部署”。
  3. 可移植性: 你的 docker-compose.yml 文件可以在任何安装了 Docker 和 Docker Compose 的机器上运行,确保开发、测试和生产环境的一致性。
  4. 数据持久化: Docker Compose 提供了便捷的卷(Volume)管理机制,确保数据库数据在容器重启或销毁后依然存在。
  5. 版本控制: 可以在 docker-compose.yml 中指定 MongoDB 的特定版本,便于版本管理和回滚。

前提条件

在开始之前,请确保你的系统上已安装 Docker 和 Docker Compose。

  • 安装 Docker Desktop (推荐): 访问 Docker 官方网站 下载并安装 Docker Desktop。它包含了 Docker Engine、Docker CLI 和 Docker Compose。
  • 验证安装: 打开终端或命令行工具,运行以下命令验证安装:
    bash
    docker --version
    docker compose version # 或 docker-compose --version (旧版本)

步骤一:创建项目目录

首先,为你的 MongoDB 项目创建一个独立的目录:

bash
mkdir my-mongodb-project
cd my-mongodb-project

步骤二:创建 docker-compose.yml 文件

my-mongodb-project 目录下,创建一个名为 docker-compose.yml 的文件。这是 Docker Compose 的核心配置文件。

bash
touch docker-compose.yml

步骤三:编辑 docker-compose.yml 文件

现在,用你喜欢的文本编辑器打开 docker-compose.yml 文件,并添加以下内容:

“`yaml
version: ‘3.8’ # Docker Compose 文件格式版本

services:
mongodb:
image: mongo:latest # 使用官方最新版 MongoDB 镜像,你也可以指定版本,例如 mongo:5.0
container_name: my-mongodb-container # 自定义容器名称
restart: always # 容器退出时总是重启
ports:
– “27017:27017” # 将主机端口 27017 映射到容器端口 27017 (MongoDB 默认端口)
environment:
# 设置 MongoDB 的 root 用户和密码,用于初始认证
# 生产环境请使用更复杂的密码,并通过 Docker Secrets 或其他安全机制管理
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: password
volumes:
# 将主机上的 ./data/db 目录挂载到容器的 /data/db 目录,用于数据持久化
– ./data/db:/data/db
# (可选) 将主机上的 ./mongo-init.js 脚本挂载到容器,用于初始化数据或创建用户
# – ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
“`

配置详解:

  • version: '3.8': 指定 Docker Compose 文件的格式版本。通常使用最新稳定版本。
  • services:: 定义应用程序中包含的服务。这里我们只有一个 mongodb 服务。
    • image: mongo:latest: 指定要使用的 Docker 镜像。mongo 是官方的 MongoDB 镜像,:latest 表示使用最新版本。如果你需要特定版本(例如 mongo:5.0),请明确指定。
    • container_name: my-mongodb-container: 为运行的 MongoDB 容器指定一个易于识别的名称。
    • restart: always: 配置容器在退出时自动重启,确保服务的可用性。
    • ports: - "27017:27017": 将主机上的 27017 端口映射到容器内部的 27017 端口。这样你就可以通过 localhost:27017 从主机访问 MongoDB 服务。
    • environment:: 设置环境变量。
      • MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD: 这些环境变量会在 MongoDB 容器首次启动时自动创建具有给定用户名和密码的 root 用户。请注意,在生产环境中,应避免在 docker-compose.yml 中直接硬编码密码,而应使用 Docker Secrets 或其他安全管理工具。
    • volumes:: 配置数据卷,实现数据持久化。
      • - ./data/db:/data/db:这是一个绑定挂载(bind mount)。它将主机上的 ./data/db 目录(相对于 docker-compose.yml 文件的当前目录)挂载到容器内部 MongoDB 存储数据 /data/db 的默认位置。这意味着所有数据库数据都将存储在你的主机上,即使容器被删除,数据也不会丢失。
      • (可选) - ./mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro:如果你想在 MongoDB 容器首次启动时执行一些初始化脚本(例如创建数据库、集合或用户),可以将一个或多个 .js.sh 文件挂载到 /docker-entrypoint-initdb.d/ 目录下。ro 表示只读。

步骤四:启动 MongoDB 服务

保存 docker-compose.yml 文件后,在终端中导航到 my-mongodb-project 目录,然后运行以下命令启动服务:

bash
docker compose up -d

  • up: 启动服务。
  • -d: 在后台(detached mode)运行容器,这样你的终端不会被占用。

首次运行此命令时,Docker 会下载 MongoDB 镜像(如果本地不存在),然后创建并启动容器。

你可以使用以下命令查看正在运行的容器:

bash
docker ps

你应该能看到一个名为 my-mongodb-container 的容器正在运行。

步骤五:验证 MongoDB 环境

有几种方法可以验证 MongoDB 是否已成功启动并运行:

1. 查看容器日志

bash
docker compose logs mongodb

你应该会看到 MongoDB 启动过程中的日志输出,包括监听 27017 端口的信息。

2. 进入容器并使用 Mongo Shell

你可以直接进入 MongoDB 容器,并使用 mongo shell 进行交互:

bash
docker exec -it my-mongodb-container mongo admin -u admin -p password

  • docker exec: 在运行中的容器中执行命令。
  • -it: 交互式终端。
  • my-mongodb-container: 你的 MongoDB 容器名称。
  • mongo: 在容器内执行 mongo 客户端命令。
  • admin -u admin -p password: 连接到 admin 数据库,并使用之前在 environment 中设置的 root 用户名和密码进行认证。

成功连接后,你将看到 MongoDB shell 提示符 >。你可以尝试一些命令,例如:

javascript
show dbs; // 显示所有数据库
use mytestdb; // 切换到或创建名为 mytestdb 的数据库
db.createCollection("users"); // 创建一个名为 users 的集合
show collections; // 显示当前数据库的所有集合
exit; // 退出 mongo shell

3. 使用 MongoDB GUI 工具

你可以使用如 MongoDB Compass、Robo 3T (Studio 3T) 等图形用户界面工具连接到你的 MongoDB 实例。

  • 连接地址: mongodb://localhost:27017/
  • 认证:
    • 用户名: admin
    • 密码: password
    • 认证数据库: admin

步骤六:停止和删除 MongoDB 服务

当你完成开发或需要清理环境时,可以使用以下命令停止并删除 Docker Compose 启动的服务:

bash
docker compose down

  • down: 停止并删除由 docker-compose.yml 文件创建的所有容器、网络和卷。

如果你想保留数据卷中的数据,可以在 docker compose down 之后手动删除容器和网络,或者在 docker-compose.yml 中明确定义一个命名的卷并在 down 命令时不使用 -v 参数。

注意: 如果你想要停止但不安删除容器,可以使用:

bash
docker compose stop

要重新启动已停止的服务:

bash
docker compose start

总结

通过 Docker Compose,我们能够以声明式的方式轻松地搭建和管理 MongoDB 环境,实现了环境隔离、快速部署和数据持久化。这极大地提高了开发效率和环境一致性。希望这篇教程能帮助你更好地利用 Docker Compose 来管理你的 MongoDB 数据库。在生产环境中,请务必关注安全性,例如使用更强大的密码、网络配置和 Docker Secrets 来保护你的数据库。


滚动至顶部