在Ubuntu上安装Docker Engine(Docker引擎)
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
Mosquitto是最常用的开源MQTT实现。一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。
1、查询镜像
docker search mosquitto
选择STARS最多的 eclipse-mosquitto
2、拉取镜像
docker pull eclipse-mosquitto
3、查看镜像
docker images eclipse-mosquitto
4、创建目录文件
4.1创建目录
mkdir -p /mosquitto/config
mkdir -p /mosquitto/data
mkdir -p /mosquitto/log
4.2初始化配置文件
vi /mosquitto/config/mosquitto.conf
# 输入一下命令内容
persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log
4.3为目录授权
chmod -R 755 /mosquitto
chmode -R 777 /mosquitto/log #日志目录要最大权限
5、启动镜像
建立运行执行脚本 mosquitto.sh
docker run -it --name=mosquitto --privileged
-p 1883:1883 -p 9001:9001
-v /mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
-v /mosquitto/data:/mosquitto/data
-v /mosquitto/log:/mosquitto/log
-d eclipse-mosquitto
./mosquitto.sh 运行
注意:
如果提示【Error: Unable to open log file /mosquitto/log/mosquitto.log for writing.】
则删了已有的日志文件重新建一个并授权再启动即可。
6、查看容器运行情况
7、配置权限
vim /mosquitto/config/mosquitto.conf
配置文件添加以下配置
# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf
8、进入容器
docker exec -it 06e57924bf31 sh
9、生成密码
#对于passworf_file,可以复制一份模板,或者创建一个空文件
touch /mosquitto/config/pwfile.conf
chmod -R 755 /mosquitto/config/pwfile.conf
# 使用mosquitto_passwd命令创建用户,第一个test是用户名,第二个test2020是密码
mosquitto_passwd -b /mosquitto/config/pwfile.conf test test2020
10、重启mqtt服务
docker restart 06e57924bf31
11、使用MQTT.fx进行连接。
连接成功
12、我这里使用 MY MQTT 的手机APP测试
连上同一个局域网的路由器WIFI,配置登录参数
APP连接MQTT服务成功
APP发布一条topic1主题消息 “hello world”
MQTT.fx的MQTT客户端接收主题数据OK
扩展验证:容器内订阅及发布内容消息验证(另外一种验证方式)
mosquitto_sub命令
mosquitto_sub监听指定主题下的消息。
常用参数:
-
-h
:连接的服务器 -
-p
:连接的端口号(缺省为1883) -
-u
:用户名 -
-P
:密码(注意P为大写) -
-V
:协议版本号(注意V为大写) -
-t
:主题名称,可以使用通配符#和+ -
-v
:输出主题+监听到的消息(否则仅输出监听到的消息)
mosquitto_pub命令
mosquitto_pub向指定的主题发送消息
常用参数:
-
-h
:连接的服务器 -
-p
:连接的端口号(缺省为1883) -
-u
:用户名 -
-P
:密码(注意P为大写) -
-V
:协议版本号(注意V为大写) -
-t
:主题名称 -
-m
:消息体
订阅主题显示窗口:
在命令窗口中,输入:
docker exec -it 06e57924bf31 sh
mosquitto_sub -h localhost -t hello/world -u test -P test2020
发布主题显示窗口:
打开另一个命令窗口,输入:
docker exec -it 06e57924bf31 sh
mosquitto_pub -h localhost -t hello/world -m "hello world !" -u test -P test2020
验证测试效果: