如何在 Docker 中從外部訪問 JMX 介面?


JMX 及其在 Java 應用程式中的應用

JMX(Java 管理擴充套件)是一種 Java 技術,它提供了一種管理和監控 Java 應用程式的方法。它公開了一組 API 和 MBean(表示要管理的資源的 Java 物件),這些 API 和 MBean 可用於監控和控制 Java 應用程式的行為。

JMX 通常用於基於 Java 的應用程式中,以監控效能指標(如記憶體使用情況、CPU 利用率和執行緒數),以及在執行時管理和配置應用程式。

從 Docker 容器外部訪問 JMX

在 Docker 容器中執行 Java 應用程式時,可能需要從主機系統訪問應用程式的 JMX 介面。這對於監控應用程式的效能或在執行時配置應用程式很有用。

但是,由於容器化層提供的隔離性,從主機系統訪問 Docker 容器中執行的 Java 應用程式的 JMX 介面可能具有挑戰性。為了從主機系統訪問 JMX 介面,需要配置應用程式和 Docker 容器以將 JMX 介面公開到主機系統。

先決條件

要從主機系統訪問 Docker 容器中執行的 Java 應用程式的 JMX 介面,必須滿足以下先決條件:

  • 必須將 Java 應用程式配置為將其 JMX 介面公開到主機系統。

  • 必須使用-p標誌執行 Docker 容器,以在主機系統上公開 JMX 埠。

  • 主機系統必須安裝並配置了一個 JMX 客戶端,以連線到 Java 應用程式的 JMX 介面。

配置 Java 應用程式以從 Docker 容器外部訪問 JMX

要配置 Java 應用程式以將其 JMX 介面公開到主機系統,可以按照以下步驟操作:

  • 將以下 JVM 選項新增到應用程式的啟動命令中

-Dcom.sun.management.jmxremote.port=<port> \
-Dcom.sun.management.jmxremote.rmi.port=<port> \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=<hostname>

將<port>替換為所需的 JMX 埠號,將<hostname>替換為 Docker 主機的主機名或 IP 地址。

  • 使用修改後的啟動命令執行應用程式。

示例

以下是如何在 Dockerfile 中配置 Java 應用程式以訪問 JMX 的示例:

FROM openjdk:8-jdk-alpine
COPY . /app
WORKDIR /app
EXPOSE <port>
CMD ["java", "-Dcom.sun.management.jmxremote.port=<port>", "-Dcom.sun.management.jmxremote.rmi.port=<port>", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Djava.rmi.server.hostname=<hostname>", "-jar", "app.jar"]

將<port>和<hostname>替換為上面描述的所需值。使用以下命令構建映象

$ docker build -t myimage .
  • 使用 -p 標誌執行 Docker 容器,以在主機系統上公開 JMX 埠。

示例

$ docker run -p <port>:<port> myimage 

將<port>替換為 JVM 選項中指定的埠號。

  • 在主機系統上,使用 JMX 客戶端連線到 Java 應用程式的 JMX 介面。

以下是如何使用jconsole實用程式(包含在 Oracle JDK 中)連線到 Docker 容器中執行的 Java 應用程式的 JMX 介面的示例

  • 啟動 jconsole,並在“連線”對話方塊中輸入 Docker 主機的主機名或 IP 地址以及 JMX 埠號。

  • 單擊“連線”。Java 應用程式的 JMX 介面應顯示在jconsole視窗中。

在 Docker 容器中使用 JMX 的提示

  • 在 Dockerfile 中配置 Java 應用程式以訪問 JMX 時,請確保使用 Docker 主機的正確主機名IP地址。可以使用 HOSTNAME 或 IP 環境變數獲取正確的值。

  • 如果在 Docker 主機上使用防火牆,請確保開啟 JMX 埠以允許來自主機系統的連線。

  • 可以透過設定適當的 JVM 選項來啟用身份驗證和 SSL,以保護 JMX 連線。

示例

-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.ssl=true

結論

在本文中,我們瞭解瞭如何從主機系統訪問 Docker 容器中執行的 Java 應用程式的 JMX 介面。我們看到,有必要配置應用程式和 Docker 容器以公開 JMX 介面。必須在主機系統上安裝並配置 JMX 客戶端才能連線到 JMX 介面。

在 Docker 容器中使用 JMX 可用於監控和管理容器化環境中的 Java 應用程式。按照本文中概述的步驟,您可以訪問在 Docker 容器中執行的 Java 應用程式的 JMX 介面,並使用它來監控效能、管理配置和解決問題。

更新於: 2023 年 1 月 30 日

2K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.