Dockerを使ったEMQXのインストール
このページでは、公式Dockerイメージを使ってEMQX Enterpriseをインストールおよび起動する方法と、Docker Composeを使ってEMQXクラスターを構築する方法を紹介します。
Dockerを使って単一のEMQXノードを起動する
このセクションでは、Dockerイメージを使って最新バージョンのEMQXをインストールする方法を紹介します。EMQX公式Dockerイメージの詳細については、Docker Hub - emqx/emqx-enterpriseをご参照ください。
Dockerイメージを取得するには、以下のコマンドを実行します。
bashdocker pull emqx/emqx-enterprise:6.2.0Dockerコンテナを起動するには、以下のコマンドを実行します。
bashdocker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:6.2.0
Dockerデプロイ時の注意点
EMQX Dockerコンテナ内で生成されたデータを永続化したい場合は、以下のディレクトリをマウントして保持する必要があります。これにより、コンテナが存在しなくなってもデータが保持されます。
bash/opt/emqx/data /opt/emqx/logEMQXのディレクトリ構成の詳細については、EMQX - ファイルとディレクトリを参照してください。
コンテナを起動し、ディレクトリをマウントする例:
bashdocker run -d --name emqx-enterprise \ --hostname node1.emqx.com \ -e "EMQX_NODE_NAME=emqx@node1.emqx.com" \ -p 1883:1883 -p 8083:8083 \ -p 8084:8084 -p 8883:8883 \ -p 18083:18083 \ -v $PWD/data:/opt/emqx/data \ -v $PWD/log:/opt/emqx/log \ emqx/emqx-enterprise:6.2.0Docker環境では、
localhostや127.0.0.1はコンテナ自身の内部ネットワークインターフェースを指し、ホストマシンのものではありません。ホストマシンで動作しているサービスにアクセスするには、ホストのIPアドレスを使用するか、ホストネットワーク設定を利用してください。Docker for MacやDocker for Windowsを使用している場合は、host.docker.internalをホストアドレスとして使用できます。EMQXはデータ保存に
data/mnesia/<node_name>ディレクトリを使用します。ノード名は安定した識別子(例えばFQDN)を選ぶことが重要です。これにより、ノード名の変更によるデータ損失を防げます。単一ノードのデプロイでは、
EMQX_NODE_NAME環境変数にemqx@hostname形式でノード名を設定してください。また、コンテナのホスト名もこれに合わせて設定する必要があります。上記の例を参照してください。注意: ノード名は
emqx@<hostname>の形式で、<hostname>はコンテナのホスト名または安定したFQDNと一致させる必要があります。単一ノードのデプロイでノード名を設定するには、
EMQX_NODE_NAME環境変数にemqx@hostnameの形式で設定します。また、コンテナのホスト名もこれに合わせて設定してください。上記の例を参照してください。
Docker Composeは複数コンテナのDockerアプリケーションを定義・実行するツールです。このセクションでは、Docker Composeを使って静的なEMQXクラスターを作成する方法を紹介します。
単一ノード構成でノード名を設定するには、EMQX_NODE_NAME環境変数をemqx@hostname形式で指定します。また、コンテナのホスト名もこれに合わせて設定してください。上記の例を参照してください。
Docker Composeは複数のコンテナからなるDockerアプリケーションを定義・実行するツールです。このセクションでは、Docker Composeを使って静的なEMQXクラスターを作成する方法を紹介します。
なお、このセクションのDocker Composeの例ファイルはローカルテスト用です。実運用環境でクラスターをデプロイする場合は、クラスターを参照してください。
TIP
Docker ComposeはDocker Desktopに標準で含まれています。もしDocker Composeが未インストールの場合は、Docker Composeのインストールを参照してインストールしてください。
任意のディレクトリに
docker-compose.ymlファイルを作成し、以下の内容を記述します。ymlversion: '3' services: emqx1: image: emqx/emqx-enterprise:6.2.0 container_name: emqx1 environment: - "EMQX_NODE_NAME=emqx@node1.emqx.com" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.com,emqx@node2.emqx.com]" healthcheck: test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] interval: 5s timeout: 25s retries: 5 networks: emqx-bridge: aliases: - node1.emqx.com ports: - 1883:1883 - 8083:8083 - 8084:8084 - 8883:8883 - 18083:18083 # volumes: # - $PWD/emqx1_data:/opt/emqx/data emqx2: image: emqx/emqx-enterprise:6.2.0 container_name: emqx2 environment: - "EMQX_NODE_NAME=emqx@node2.emqx.com" - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.com,emqx@node2.emqx.com]" healthcheck: test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] interval: 5s timeout: 25s retries: 5 networks: emqx-bridge: aliases: - node2.emqx.com # volumes: # - $PWD/emqx2_data:/opt/emqx/data networks: emqx-bridge: driver: bridgeコマンドラインツールで
docker-compose.ymlがあるディレクトリに移動し、以下のコマンドを実行してEMQXクラスターを起動します:bashdocker-compose up -dクラスターの状態を確認するには、以下のコマンドを実行します。
bash$ docker exec -it emqx1 sh -c "emqx ctl cluster status" Cluster status: #{running_nodes => ['emqx@node1.emqx.com','emqx@node2.emqx.com'], stopped_nodes => []}
次のステップ
MQTTクライアントを使ってEMQXに接続し、メッセージのパブリッシュ/サブスクライブを行ってください。詳細はパブリッシュとサブスクライブを参照してください。