Skip to content

Dockerを使ったEMQXのインストール

このページでは、公式Dockerイメージを使ってEMQX Enterpriseをインストールおよび起動する方法と、Docker Composeを使ってEMQXクラスターを構築する方法を紹介します。

Dockerを使って単一のEMQXノードを起動する

このセクションでは、Dockerイメージを使って最新バージョンのEMQXをインストールする方法を紹介します。EMQX公式Dockerイメージの詳細については、Docker Hub - emqx/emqx-enterpriseをご参照ください。

  1. Dockerイメージを取得するには、以下のコマンドを実行します。

    bash
    docker pull emqx/emqx-enterprise:6.2.0
  2. Dockerコンテナを起動するには、以下のコマンドを実行します。

    bash
    docker 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デプロイ時の注意点

  1. EMQX Dockerコンテナ内で生成されたデータを永続化したい場合は、以下のディレクトリをマウントして保持する必要があります。これにより、コンテナが存在しなくなってもデータが保持されます。

    bash
    /opt/emqx/data
    /opt/emqx/log

    EMQXのディレクトリ構成の詳細については、EMQX - ファイルとディレクトリを参照してください。

    コンテナを起動し、ディレクトリをマウントする例:

    bash
    docker 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.0
  2. Docker環境では、localhost127.0.0.1はコンテナ自身の内部ネットワークインターフェースを指し、ホストマシンのものではありません。ホストマシンで動作しているサービスにアクセスするには、ホストのIPアドレスを使用するか、ホストネットワーク設定を利用してください。Docker for MacやDocker for Windowsを使用している場合は、host.docker.internalをホストアドレスとして使用できます。

  3. 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のインストールを参照してインストールしてください。

  1. 任意のディレクトリにdocker-compose.ymlファイルを作成し、以下の内容を記述します。

    yml
    version: '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
  2. コマンドラインツールでdocker-compose.ymlがあるディレクトリに移動し、以下のコマンドを実行してEMQXクラスターを起動します:

    bash
    docker-compose up -d
  3. クラスターの状態を確認するには、以下のコマンドを実行します。

    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に接続し、メッセージのパブリッシュ/サブスクライブを行ってください。詳細はパブリッシュとサブスクライブを参照してください。

  • EMQXのパラメータ設定やその他の機能については、設定を参照してください。

  • 複数ノードによるEMQXクラスターの構築方法については、クラスターを参照してください。