Docker - Mosquitto 设置



Mosquitto 是一个库,用于使用 MQTT 协议处理服务器和客户端之间的内部通信。它是一个开源且免费的消息代理,用于开发与实时通信和物联网相关的应用程序。

借助 Docker,Mosquitto 可以高效地进行容器化,从而易于在隔离的环境中进行管理、部署和扩展。

在本章中,我们将学习 Docker 化 Mosquitto 的正确流程。

Docker 化 Mosquitto 的先决条件

在学习如何 Docker 化 Mosquitto 之前,您需要具备以下先决条件:

  • Docker 环境基础知识 - 例如:镜像、容器、Dockerfile 等 Docker 相关功能的知识。
  • Mosquitto 基础知识 - 对 MQTT 协议以及 Mosquitto 如何为服务器和客户端提供消息代理功能的基本了解。
  • Docker 安装 - 您需要在系统中安装 Docker。如果您在安装 Docker 时遇到任何问题,可以参考此文档:Docker 官方网站
  • 文本编辑器 - 在开始设置之前,您应该熟练使用系统中的文本编辑器,例如 VSCode、Sublime 或简单的记事本。
  • CLI(命令行界面) - 熟练使用 CLI 将为您带来额外优势。

在 Docker 中配置和连接 Mosquitto 的步骤

在本节中,我们将逐步说明如何在 Docker 环境中配置和连接 Mosquitto:

步骤 1:从官方 Docker Hub 拉取 Mosquitto 镜像

首先,我们只需从 Docker 官方网站拉取 Mosquitto 镜像。这可以通过打开终端或命令提示符并运行以下命令来完成:

$ docker pull eclipse-mosquitto

此命令将把 Mosquitto 的最新镜像拉取到您的本地环境。

Pull the Mosquitto Image

步骤 2:创建 Docker 网络

如果您需要在多个 Docker 容器和 Mosquitto 之间执行内部通信,可以使用 Docker 网络。请注意,这是一个可选步骤,可以根据您的方便跳过。让我们创建一个 Docker 网络。为此,请使用以下命令:

$ docker network create mosquitto-net

以上命令创建了一个 Docker 网络。

create a docker network

在我们的例子中,Docker 网络的名称是“mosquitto-net”。

步骤 3:创建 Mosquitto 配置文件

我们需要一个 Mosquitto 配置文件来指定设置,例如侦听器的端口和安全选项。因此,让我们开始创建 mosquitto.conf 文件以及数据、日志和配置目录,使用以下命令集:

$ mkdir mosquitto-docker
$ cd mosquitto-docker
$ mkdir config data log

在 config 目录中创建一个名为 mosquitto.conf 的文件,并添加以下配置。(此处应补充具体的配置文件内容)

listener 1883
allow_anonymous true

步骤 4:启动 Mosquitto Docker 容器

现在让我们创建一个 Mosquitto Docker 容器。这可以通过运行以下命令来实现:

$ docker run -d --name mosquitto -v <path_to>/config:/mosquitto/config -v <path_to>/data:/mosquitto/data -v <path_to>/log:/mosquitto/log eclipse-mosquitto

让我们分解以上命令以便更好地理解:

  • docker run - 用于创建和运行容器。
  • -d - 此标志表示分离模式,因此容器在后台运行。
  • --name - 此标志用于为容器分配名称。
  • -v - 用于将卷挂载到容器。
  • -p 1883:1883 - 这将主机的 1883 端口映射到 Mosquitto 的 MQTT 协议信使。
  • eclipse-mosquitto - 这是我们已下载的 Docker 镜像的名称。
Start Mosquitto docker container

步骤 5:检查容器是否正在运行

确保容器已启动并正在运行。要验证这一点,可以使用以下命令:

$ docker ps
Check if the Container is Running

步骤 6:查看 Mosquitto 的日志

我们可以检查 Mosquitto 的日志,以确保执行过程中没有错误,使用以下命令:

$ docker logs mosquitto
View the Logs of Mosquitto

步骤 7:测试 Mosquitto

您可以使用 mosquitto_sub 和 mosquitto_pub 对象测试 Mosquitto 消息代理。如果这些工具在本地不可用,我们可以在 Docker 中运行以下命令:

运行以下命令时,您可以使用两个单独的终端。

在第一个标签中,要发布消息,请运行以下命令:

$ docker run -it --rm --network bridge eclipse-mosquitto mosquitto_pub -h <host ip> -t test/topic -m <message>
Test Mosquitto 1

在第二个标签中,要订阅主题,请运行以下命令:

$ docker run -it --rm --network bridge eclipse-mosquitto mosquitto_sub -h <host ip> -t test/topic
Test Mosquitto 2

在订阅者终端标签中,您将能够看到来自发布者终端标签的接收到的消息。

让我们详细了解上述命令中使用的标志:

  • -it - 这是交互式终端标志。
  • --rm - 此标志确保在退出后及时删除容器。
  • --network bridge: 此标志指定容器应该使用桥接网络
  • -h - 此标志提供有关发布者 mosquitto_pub 连接到的 MQTT 代理的主机名或 IP 的详细信息。
  • -t test/topic - 此标志有助于识别要发送的消息所基于的主题的名称。
  • -m - 此标志说明要发布的消息。

注意 - 您可以使用以下命令获取系统的

$ docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" mosquitto

此命令用于以 JSON 格式获取有关 Docker 属性(例如容器)的信息。

Test Mosquitto 3

结论

在本章中,我们学习了如何在 Docker 环境中设置 Mosquitto 并高效地管理它。此设置确保您的 Mosquitto 代理在隔离的环境中运行,使其便携且易于部署。环境是一致的,您可以轻松地将其与其他 Docker 设置共享或集成。

在 Docker 中设置 Mosquitto 的常见问题

关于使用 Docker 设置 Mosquitto,有一些非常常见的问题,本节尝试简要解答它们。

1. 如何升级 Docker 中的 Mosquitto 版本?

您可以通过运行以下命令来升级 Docker 中的 Mosquitto 版本:“docker pull eclipse-mosquitto”。如果需要,您还可以添加版本标签,例如命令中的“eclipse-mosquitto:2.0”以获取特定版本的库。

2. 如何在 Docker 中排查 Mosquitto 相关的错误?

我们可以通过使用“docker logs mosquitto”检查 Mosquitto 容器日志来排查任何错误。确保容器拥有足够的资源,并检查您的计算机上 1883 端口是否未被阻止或被其他服务使用。

广告