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 埠是否未被阻止或被其他服務使用。

廣告