Docker 实战 -- EMQX
文章目录
- 前言
- EMQX
- 单结点部署
- docker-compose.yml
- 运行
- 集群部署
- docker-compose.yml
- 运行与校验
前言
当你迷茫的时候,请点击 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: emqxvolumes:- ./certs:/opt/emqx/etc/certs- ./data:/opt/emqx/dataenvironment:- /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.pemnetworks:- emqx-bridgenetworks: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 节点 1emqx1:image: emqx:latestcontainer_name: emqx1hostname: node1.emqx.io # 显式设置主机名,确保解析正确volumes:#- ./certs1:/opt/emqx/etc/certs- ./data1:/opt/emqx/dataenvironment:- 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: 10stimeout: 5sretries: 10restart: unless-stopped# EMQX 节点 2emqx2:image: emqx:latestcontainer_name: emqx2hostname: node2.emqx.io # 显式设置主机名volumes:#- ./certs2:/opt/emqx/etc/certs- ./data2:/opt/emqx/dataenvironment:- 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: 10stimeout: 5sretries: 10restart: unless-stoppednetworks: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
,查看集群情况:
在页面上还有客户端可供测试: