概述

  1. MQTT 是一种基于发布/订阅(Publish/Subscribe)模式的轻量级消息协议, 常用于物联网设备之间的通信.
+ MQTT 的核心概念
  1. Broker(服务器): 消息中间人,负责接收和转发消息.
  2. Client(客户端): 可以是发布者或订阅者.
  3. Topic(主题): 消息的"频道",订阅者监听某个 Topic,发布者向该 Topic 发送消息.
  4. QoS(服务质量): 有三种级别,0(最多一次), 1(至少一次), 2(只有一次).

流程

创建项目文件
编辑 mosquitto/mqtt/config/mosquitto.conf文件
编辑 mosquitto/Dockerfile 文件
编辑 mosquitto/build.sh 文件
编辑 docker-compose.yml 文件
编辑 build.sh 文件
运行
touch docker-compose.yml
touch build.sh
chmod a+x build.sh
mkdir -p mosquitto/mqtt/{config,data,log}
cd mosquitto
touch Dockerfile 
touch build.sh
chmod a+x build.sh
cd mqtt/config
touch passwd
listener 1883 0.0.0.0
# 配置websocket的连接端口
listener 9001
# 以websocket方式连接mqtt服务
protocol websockets
persistence true
# 数据存储路径
persistence_location /mosquitto/data/
# 运行日志存储路劲
log_dest file /mosquitto/log/mosquitto.log
# 用户文件存储路径
password_file /mosquitto/config/passwd
per_listener_settings false
# 设置匿名访问
allow_anonymous true
FROM eclipse-mosquitto:2.0.21

# 开放 MQTT 端口
EXPOSE 1883
# 开放 WebSocket 端口
EXPOSE 9001
#/bin/bash
set -e
docker build -t eclipse-mosquitto .
services:
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: eclipse-mosquitto
    ports:
      - "1883:1883"
      - "9001:9001"
    volumes:
      - ./mosquitto/mqtt/config:/mosquitto/config
      - ./mosquitto/mqtt/data:/mosquitto/data
      - ./mosquitto/mqtt/log:/mosquitto/log
#/bin/bash
set -e
echo "构建mosquitto容器"
cd ./mosquitto/
chmod +x ./build.sh
./build.sh
cd ..
./build.sh

docker compose up -d

# 进入容器启用用户名密码认证
docker exec -it eclipse-mosquitto sh

# 设置用户名: yhj 密码: 636216
mosquitto_passwd -b /mosquitto/config/passwd yhj 636216

# 退出容器
exit

# 重启服务
docker-compose restart
  1. 客户端使用 MQTT工具(MQTTX)测试

参考链接

  1. 在 Docker 中部署 MQTT Server
  2. MQTT QoS 0、1、2 解析:快速入门指南