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.3Dockerコンテナを起動するには、以下を実行します:
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.3
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.3Docker環境では、
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@<host>の形式で指定します。また、コンテナのホスト名もこれに合わせて設定してください。上記の例を参照してください。注意:
<host>部分はIPアドレスまたはnode1.emqx.comのような完全修飾ドメイン名(FQDN)でなければなりません。EMQXはErlangノードをロングネームモードで実行するため、node1のようなドットを含まない短いホスト名は使用できません。
Docker Composeを使用してEMQXクラスターを構築する
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.3 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.3 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に接続し、メッセージのパブリッシュ/サブスクライブを行います。詳細はパブリッシュとサブスクライブをご覧ください。