Docker 实战 -- EMQX

发布于:2025-08-31 ⋅ 阅读:(27) ⋅ 点赞:(0)

前言

当你迷茫的时候,请点击 Docker 实战目录 快速查看前面的技术文章,相信你总能找到前行的方向

EMQX

EMQX 是一款基于 Erlang/OTP 平台开发的开源 MQTT 消息服务器,专为物联网(IoT)场景设计,支持大规模连接和低延迟消息传输 。它不仅支持标准的 MQTT 协议,还支持 MQTT-SN、CoAP、LwM2M、WebSocket 等多种协议,适用于多种物联网应用场景 。

EMQX 提供了丰富的功能,包括消息发布、订阅、认证、规则引擎、集群部署、数据存储、监控和告警等功能,官网教程参考 https://www.emqx.com/zh/mqtt-guide

单结点部署

EMQX 单节点用docker-compose部署, 其配置文件为:

docker-compose.yml

version: "3"
services:
  emqx:
    image: "emqx:latest"
    ports:
      - "18083:18083"
      - "8883:8883"
      - "8084:8084"
      - "8083:8083"
      - "1883:1883"
    container_name: emqx
    volumes:
      - ./certs:/opt/emqx/etc/certs
      - ./data:/opt/emqx/data
    environment:
      - /etc/localtime:/etc/localtime
      - EMQX_NODE_NAME=emqx@node.emqx.io
      - EMQX_DASHBOARD__DEFAULT_PASSWORD=123456
    # - EMQX_LISTENER__SSL__EXTERNAL__PORT=8883
    # - EMQX_LISTENER__SSL__EXTERNAL__KEYFILE=/opt/emqx/etc/certs/emqx.key
    # - EMQX_LISTENER__SSL__EXTERNAL__CERTFILE=/opt/emqx/etc/certs/emqx.pem
    # - EMQX_LISTENER__SSL__EXTERNAL__CACERTFILE=/opt/emqx/etc/certs/ca.pem
    networks:
      - emqx-bridge

networks:
  emqx-bridge:
    driver: bridge

运行

docker-compose 运行EMQX

# 停止并删除旧容器
docker compose down
# 重新启动集群
docker compose up -d
# 查看节点1的日志,确认集群状态
docker compose logs -f emqx

访问页面 http://localhost:18083 管理页面 默认账密为admin/public,但上面配置中密码我改成了123456,登录进去即可查看EMQX情况:
在这里插入图片描述

集群部署

docker-compose.yml

version: '3'

services:
  # EMQX 节点 1
  emqx1:
    image: emqx:latest
    container_name: emqx1
    hostname: node1.emqx.io  # 显式设置主机名,确保解析正确
    volumes:
      #- ./certs1:/opt/emqx/etc/certs
      - ./data1:/opt/emqx/data
    environment:
      - EMQX_NODE_NAME=emqx@node1.emqx.io
      - EMQX_CLUSTER__DISCOVERY_STRATEGY=static
      - EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io,emqx@node2.emqx.io  # 修正格式
    networks:
      emqx-net:
        aliases:
          - node1.emqx.io  # 添加网络别名,确保解析
    ports:
      - "1883:1883"
      - "8083:8083"
      - "8084:8084"
      - "8883:8883"
      - "18083:18083"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"]
      interval: 10s
      timeout: 5s
      retries: 10
    restart: unless-stopped

  # EMQX 节点 2
  emqx2:
    image: emqx:latest
    container_name: emqx2
    hostname: node2.emqx.io  # 显式设置主机名
    volumes:
      #- ./certs2:/opt/emqx/etc/certs
      - ./data2:/opt/emqx/data
    environment:
      - EMQX_NODE_NAME=emqx@node2.emqx.io
      - EMQX_CLUSTER__DISCOVERY_STRATEGY=static
      - EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io,emqx@node2.emqx.io  # 相同的种子列表
    networks:
      emqx-net:
        aliases:
          - node2.emqx.io  # 添加网络别名
    ports:
      - "1884:1883"
      - "8085:8083"
      - "8086:8084"
      - "8884:8883"
      - "18084:18083"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"]
      interval: 10s
      timeout: 5s
      retries: 10
    restart: unless-stopped

networks:
  emqx-net:
    driver: bridge

运行与校验

docker-compose 运行EMQX

# 停止并删除旧容器
docker compose down
# 重新启动集群
docker compose up -d
# 查看节点1的日志,确认集群状态
docker compose logs -f emqx1

校验集群状态

# 方法1:在任意节点上执行
docker exec -it emqx1 /opt/emqx/bin/emqx ctl cluster status
# Cluster status: #{running_nodes => ['emqx@node1.emqx.io','emqx@node2.emqx.io'],
#                  stopped_nodes => []}

# 方法2:通过API检查
curl http://localhost:18083/api/v5/nodes

在页面登录 节点1 http://localhost:18083,或者 节点2 http://localhost:18084 ,默认账号密码为 admin/public,查看集群情况:
在这里插入图片描述
在页面上还有客户端可供测试:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到