MongoDB Docker: 终极入门指南 – wiki基地

我遇到了一个技术问题,无法创建或写入文件,因为相关的工具在当前环境中不可用。

不过,我已经为您准备好了完整的文章内容。您可以将以下文本复制并粘贴到一个新文件中,然后将其命名为 mongodb_docker_guide.md


MongoDB Docker: 终极入门指南

简介

在现代应用开发中,数据库是不可或缺的核心组件。MongoDB 以其灵活的文档模型、高可扩展性和强大的功能,成为了最受欢迎的 NoSQL 数据库之一。而 Docker 作为领先的容器化技术,能够让开发者轻松地打包、分发和运行应用程序。

将 MongoDB 与 Docker 结合,可以极大地简化开发、测试和部署流程。本指南将从零开始,带您一步步了解如何在 Docker 环境中启动、管理和持久化您的 MongoDB 数据库。

准备工作

在开始之前,请确保您的系统已经安装了 Docker Desktop。它包含了 Docker 引擎、Docker CLI 客户端以及 Docker Compose,是与 Docker 容器交互所需的一切。

快速上手

步骤 1: 拉取 official MongoDB 镜像

Docker Hub 上提供了官方的 MongoDB 镜像。打开您的终端或 PowerShell,运行以下命令来拉取最新版本的 MongoDB 镜像:

bash
docker pull mongo

这个命令会从 Docker Hub 下载 mongo 仓库的最新 (latest) 镜像。

步骤 2: 运行一个基本的 MongoDB 容器

镜像下载完成后,您可以使用 docker run 命令来启动一个 MongoDB 容器:

bash
docker run --name some-mongo -p 27017:27017 -d mongo

让我们分解一下这个命令:
docker run: 运行一个新容器的命令。
--name some-mongo: 为您的容器指定一个容易记住的名字 some-mongo
-p 27017:27017: 将主机的 27017 端口映射到容器的 27017 端口。MongoDB 默认监听 27017 端口。这样您就可以通过 localhost:27017 连接到容器内的 MongoDB。
-d: (detached) 让容器在后台运行。
mongo: 指定要使用的镜像。

您可以使用 docker ps 命令来查看正在运行的容器,确认 some-mongo 是否已成功启动。

步骤 3: 连接到你的 MongoDB 实例

容器运行后,您可以使用 docker exec 命令进入容器内部,并启动 MongoDB Shell (mongosh) 与数据库进行交互。

bash
docker exec -it some-mongo mongosh

  • docker exec: 在正在运行的容器中执行命令。
  • -it: (interactive & TTY) 允许您与容器的 shell进行交互。

成功连接后,您会看到 mongosh 的欢迎信息,现在您可以像在本地安装的 MongoDB 中一样执行所有命令了,例如:

“`javascript

show dbs
admin 0.000B
config 0.000B
local 0.000B

use myNewDatabase
switched to db myNewDatabase

db.myCollection.insertOne({ hello: “MongoDB in Docker” })
{
acknowledged: true,
insertedId: ObjectId(“…”)
}
“`

数据持久化:使用卷 (Volume)

默认情况下,当您删除容器时,容器内存储的所有数据(包括您的数据库文件)都会丢失。这对于生产环境或任何需要长期保存数据的场景都是不可接受的。

为了解决这个问题,我们需要使用 Docker 卷 (Volume) 来将数据持久化存储在主机上。

首先,停止并删除我们之前创建的临时容器:

bash
docker stop some-mongo
docker rm some-mongo

现在,创建一个新的 MongoDB 容器,并挂载一个卷:

bash
docker run -d \
--name permanent-mongo \
-p 27017:27017 \
-v mongodb_data:/data/db \
mongo

新参数 -v mongodb_data:/data/db 的含义是:
-v: (volume) 挂载一个卷。
mongodb_data: 这是 Docker 自动创建和管理的具名卷 (Named Volume) 的名称。
/data/db: 这是 MongoDB 在容器内部存储其数据文件的默认路径。

通过这个命令,容器内的 /data/db 目录被映射到了主机上名为 mongodb_data 的卷。现在,即使您停止和删除了 permanent-mongo 容器,数据仍然安全地保存在 mongodb_data 卷中。下次您创建一个新的 MongoDB 容器并挂载同一个卷时,所有旧数据都将可用。

使用 Docker Compose 简化管理

当您的应用包含多个服务(例如一个 web 服务器和一个数据库)时,使用 docker run 管理多个容器会变得非常繁琐。Docker Compose 允许您使用一个 YAML 文件来定义和运行多容器 Docker 应用程序。

  1. 在您的项目根目录下创建一个名为 docker-compose.yml 的文件。

  2. 将以下内容复制到文件中:

    “`yaml
    version: ‘3.8’

    services:
    mongodb:
    image: mongo:latest
    container_name: my-mongodb
    restart: always
    ports:
    – “27017:27017”
    environment:
    MONGO_INITDB_ROOT_USERNAME: root
    MONGO_INITDB_ROOT_PASSWORD: example
    volumes:
    – mongodb_data:/data/db

    volumes:
    mongodb_data:
    “`

    这个 Compose 文件定义了一个名为 mongodb 的服务:
    image: 使用 mongo:latest 镜像。
    container_name: 容器名称。
    restart: always: 确保容器在退出时总是会重新启动。
    ports: 映射端口。
    environment: 设置环境变量。MONGO_INITDB_ROOT_USERNAMEMONGO_INITDB_ROOT_PASSWORD 用于在数据库首次初始化时创建一个具有指定凭据的 root 用户。这是一个非常好的安全实践。
    volumes: 定义了具名卷 mongodb_data 并将其挂载到容器的 /data/db 目录。

  3. docker-compose.yml 所在的目录中,运行以下命令来启动服务:

    bash
    docker-compose up -d

    Docker Compose 会自动读取文件,创建并启动 mongodb 服务。

  4. 当您想停止服务时,运行:

    bash
    docker-compose down

    down 命令会停止并删除容器,但同样,mongodb_data 卷中的数据会保留下来。

使用 GUI 工具连接

使用 Docker 运行 MongoDB 后,您可以使用任何图形用户界面(GUI)工具(如 MongoDB Compass)来连接和管理数据库。

在连接时,只需使用主机的地址和映射的端口即可。对于我们上面 docker-compose.yml 的例子,连接字符串将是:

mongodb://root:example@localhost:27017/

总结

通过 Docker,您可以获得一个可移植、一致且隔离的 MongoDB 环境,这极大地提高了开发和运维效率。在本指南中,我们学习了:
– 如何拉取和运行 MongoDB 容器。
– 如何通过 Docker 卷实现数据持久化。
– 如何使用 Docker Compose 来编排和管理 MongoDB 服务,并设置认证。

现在,您已经掌握了在 Docker 中运行 MongoDB 的基础知识。从这里开始,您可以轻松地将 MongoDB 集成到您未来的任何项目中。

滚动至顶部