如何部署和管理 Docker MongoDB 容器

MongoDB是一款流行的开源文档数据库,提供高性能和极大的灵活性。但是,您有没有尝试过为您的项目容器化 MongoDB 数据库呢?如果没有,那么您将有一个愉快的体验!

在本教程中,您将学到如何使用 Docker 部署、保护和管理 MongoDB,让您成为自己的 Docker MongoDB 容器部署大师!

先决条件

本教程包括实际演示。要跟着进行,请确保您拥有以下内容:

  • A user with sudo permission
  • Docker – 本教程使用 Docker 20.10.9

下载 Docker MongoDB 镜像

在您部署和管理 Docker MongoDB 容器之前,您首先需要从 Docker Hub 下载 MongoDB 镜像,以便在本地运行 MongoDB 容器。

运行以下docker命令来下载 MongoDB 社区版(CE)镜像 (pull mongo), 这个镜像托管在 Docker Hub 上。在撰写本文时,该镜像的最新版本为 4.2。

sudo docker pull mongo

如下所示,该命令会自动拉取镜像的最新版本,并将其标记为 latest

Pulling mongo image

现在运行以下docker images命令以列出服务器上所有可用的镜像。

sudo docker images

下面,您可以看到标记为 latest 的 MongoDB 镜像。

Listing all Docker images

部署 Docker MongoDB 容器

从您下载的 MongoDB 镜像中,您现在可以部署一个 MongoDB 容器。您将使用 mongo 可执行文件初始化 MongoDB 容器,并创建一个数据目录。然后,您将定义 Docker 容器数据区域与主机的映射。

1. 运行以下mkdir命令以创建一个名为 mongodata 的数据目录,用于存储 MongoDB 数据库和日志。

sudo mkdir -p /mongodata

2. 接下来,执行以下docker run命令以创建一个名为 mymongo 的容器。此外,容器将以交互式伪终端模式启动 (-it),以便在启动容器时显示输出。

最后,新创建的目录 mongodata 被绑定 (-v) 到内部目录 /data/db-d 选项以 分离模式 启动容器,因此它作为后台进程运行,并在创建时返回控制台输出。

系统在你运行容器时自动创建 /data/db 目录,用于存储容器中所做更改的数据。该目录以类似只读的模式运行,并在主机系统上启用持久数据存储。

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

一旦命令成功完成,你将会看到如下输出。

Deploying MongoDB Container

3. 最后,运行以下 docker ps 命令以识别容器的 ID 并检查其状态。 docker ps 命令会显示有关当前正在运行的容器的所有信息。

docker ps 命令类似于 Linux 中常规的 ps 命令。

sudo docker ps

在下面显示的输出中,你可以看到一个 端口 部分,列出了分配给容器以侦听传入连接的所有端口。

在这个例子中,端口 27017 被映射到主机。下面的输出表示您可以通过主机上的 localhost:27017 访问此容器中的 MongoDB 实例。

Checking Docker MongoDB Container Status

也许您想查看 mymongo 容器的日志文件,以确定当您的 MongoDB 数据库/实例出现问题时发生了什么。如果是这样,请运行 docker logs 命令,如下所示:sudo docker logs docker-container。将 docker-container 替换为您的 Docker 容器名称。

Reading Docker Container Log File

将 Docker MongoDB 容器附加到 Bash Shell

您刚刚部署了一个 Docker MongoDB 容器,但是如何管理它呢?首先使用 docker exec 命令将 Docker 容器附加到 Bash Shell。

将容器附加到 Bash Shell 非常重要,因为容器当前正在以分离模式运行(在后台运行)。如果容器在后台运行,那么容器既不会接收任何输入,也不会显示输出。

运行下面的 docker exec 命令 将您的容器(mymongo)附加到 Bash Shell。

sudo docker exec -it mymongo bash

命令完成后,您的提示符将更改为以下内容。唯一的字母数字编号(77782fa95314)是容器 ID。

容器ID对于避免命名冲突并在主机之间有效地识别容器至关重要,因此尽量不要更改它们。

Attaching Docker MongoDB Container to Bash Shell

现在运行mongo命令,不带任何参数以登录容器(mymongo)中的MongoDB shell。 MongoDB shell是您运行mongo查询/命令的地方。

一旦您进入容器,您可以在不带sudo前缀的情况下运行任何命令,因为您现在是容器内的root用户。您在容器中进行的每个更改都不会影响到您的主机系统。

mongo

通过查看下面显示的提示,您可以确定您现在位于MongoDB shell中。

Logging in to the MongoDB shell

如果您希望在MongoDB shell中查看所有可用命令,请运行help命令,如下所示。

Listing Available Commands in MongoDB Shell

创建一个管理 MongoDB 用户

在您部署了一个 MongoDB 服务器到一个 Docker 容器之后,现在您将创建一个管理 MongoDB 用户。一个管理用户可以让您连接到 MongoDB 服务器并管理数据库。

1. 再次登录 MongoDB shell,并运行下面的use命令来首先切换到admin数据库。这样做可以为管理用户提供管理数据库的权限。

use admin
Switching to the Admin Database

在MongoDB提示符中粘贴以下代码以创建一个管理员用户。

下面的代码使用db.createUser()方法创建一个具有管理员角色的用户。下面的用户名(user)和密码(pwd)是硬编码的,您可以根据需要更改。

# 创建一个管理员用户
db.createUser(
{
	# 为管理员用户设置用户名
	user: "ata",
	# 为管理员用户设置密码
	pwd: "password123",
	# 为管理员用户设置角色
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

如果代码运行成功,您将在MongoDB提示符中收到类似以下消息。

Creating an Administrative New User

3. 运行以下quit()查询以退出MongoDB shell。

quit()

4. 最后,运行以下mongo命令来测试您创建的管理员用户(ata)是否可以连接到MongoDB服务器。提示时输入管理员用户的密码。

mongo -u ata -p --authenticationDatabase admin

如下所示,如果成功连接到服务器,MongoDB服务器将打印出MongoDB服务器版本。

Connecting to the MongoDB Server

也许您想进一步测试管理用户。如果是这样,请运行以下命令以显示数据库中的所有用户。

use admin
show users

下面,您可以看到您创建的管理用户在列表中。

Listing Users in Database

创建 MongoDB 数据库

在没有通过 MongoDB shell 进行数据存储之前,管理 Docker MongoDB 容器是不完整的。您将创建一个新的 MongoDB 数据库,通过 MongoDB shell 将数据存储到其中。

1. 在 Docker 容器的交互式会话中运行以下命令show dbs以列出服务器中的所有数据库。

show dbs

下面,您可以看到一个 admin 数据库、一个 config 数据库和一个 local 数据库。MongoDB shell 会在每个 MongoDB 服务器中默认创建这些数据库。

Listing all MongoDB Databases

2. 接下来,运行以下命令use以创建一个新的数据库。用您选择的数据库名称替换<database_name>。但是在本例中,数据库的名称为linux

use 查询会将当前数据库切换到您指定的数据库(如果存在)。如果不存在,则use 查询会创建一个新的数据库并自动切换到它。

use <database_name>
Creating a new MongoDB Database

3. 重新运行show dbs命令,就像您之前做的一样(步骤一),以查看您创建的数据库是否存在。

show dbs

仍然看不到新创建的数据库(Linux)在列表上?MongoDB只有在您第一次存储数据时才会构建数据库。数据可以是集合的形式,甚至可以是文档的形式。

Listing all MongoDB Databases

4.现在复制/粘贴下面的代码到MongoDB shell并按Enter键。

下面的代码创建了一个名为linux_version的新集合,您可以将其更改为您喜欢的名称。该集合以键值对的格式包含数据。

# 使用insertOne方法插入数据
db.linux_version.insertOne(
	# 要插入到数据库的键值对
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

在下面的输出中,您可以看到已创建linux_version集合,并带有ObjectID

Showing collection with its ID

5.运行show collections命令查看集合列表,以及新集合linux_version是否存在。

show collections

您可以在下面看到,您已成功创建linux_version集合。

Showing List of Collections

最后,运行以下命令查看并确认你插入到linux_version集合中的数据是否正确。 pretty() 方法允许你以人类可读的格式查看数据。

db.linux_version.find().pretty()

如果你曾经修改了数据库中的数据,使用Update() 方法。

你可以看到下面的输出以更易读的格式显示。

Viewing Data from MongoDB Database

重新启动 Docker MongoDB 容器

到目前为止,你已经成功运行了 Docker MongoDB 容器。但是如果你不再需要该容器,或者它不起作用怎么办?几个 Docker 命令可以帮助停止、重启甚至删除 MongoDB Docker 容器。

1. 运行下面的docker ps命令列出所有正在运行的容器。

sudo docker ps

注意下面显示的容器名称和容器 ID,这是你希望停止、重启或删除的容器。

Showing all running docker containers

2. 接下来,运行以下任一docker stop命令来停止正在运行的 MongoDB 容器。

sudo docker stop mymongo
sudo docker stop container-ID

3. 再次运行docker ps命令(如前面所做的第一步)检查容器是否已关闭。

sudo docker ps

如你所见,容器不在正在运行的容器列表中,这表明你已成功停止了容器。

Listing all Containers

4. 现在如果您决定重新启动容器,可以运行以下任一docker start命令之一。

sudo docker start mymongo
sudo docker start container-ID

5. 最后,重新运行docker ps命令,查看容器是否正在运行。

sudo docker ps

也许您不再需要某个容器。 如果是这样,请首先停止容器,然后运行rm命令来删除容器,就像这样:sudo docker container rm mongodb。 与前面的示例类似,请将mongodb替换为容器名称或容器ID。

结论

在本教程中,您已经学会了如何通过创建管理员用户来部署和管理Docker MongoDB容器,以创建数据库并将数据存储到其中。 您已经意识到,您可以停止,重新启动和删除不再需要的容器,以保持您的Docker映像干净。

使用Docker部署和管理MongoDB是利用容器化技术并减少开销的第一步。 为什么不利用这个第一步来更深入地了解MongoDB,并查看Docker MongoDB容器如何帮助您的项目?

Source:
https://adamtheautomator.com/docker-mongodb/