在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

testlink docker搭建 docker搭建mqtt_用户名

选择STARS最多的  eclipse-mosquitto

2、拉取镜像

docker pull eclipse-mosquitto

testlink docker搭建 docker搭建mqtt_testlink docker搭建_02

 3、查看镜像

docker images eclipse-mosquitto

testlink docker搭建 docker搭建mqtt_用户名_03

 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

testlink docker搭建 docker搭建mqtt_testlink docker搭建_04

 ./mosquitto.sh 运行

注意:
如果提示【Error: Unable to open log file /mosquitto/log/mosquitto.log for writing.】
则删了已有的日志文件重新建一个并授权再启动即可。

testlink docker搭建 docker搭建mqtt_eclipse_05

6、查看容器运行情况

testlink docker搭建 docker搭建mqtt_eclipse_06

 7、配置权限

vim  /mosquitto/config/mosquitto.conf

配置文件添加以下配置

# 关闭匿名模式
allow_anonymous false
# 指定密码文件
password_file /mosquitto/config/pwfile.conf

testlink docker搭建 docker搭建mqtt_eclipse_07

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

testlink docker搭建 docker搭建mqtt_docker_08

testlink docker搭建 docker搭建mqtt_用户名_09

11、使用MQTT.fx进行连接。

testlink docker搭建 docker搭建mqtt_eclipse_10

连接成功

testlink docker搭建 docker搭建mqtt_testlink docker搭建_11

 12、我这里使用 MY MQTT 的手机APP测试

连上同一个局域网的路由器WIFI,配置登录参数

testlink docker搭建 docker搭建mqtt_testlink docker搭建_12

 APP连接MQTT服务成功

testlink docker搭建 docker搭建mqtt_testlink docker搭建_13

 APP发布一条topic1主题消息 “hello world”

testlink docker搭建 docker搭建mqtt_testlink docker搭建_14

MQTT.fx的MQTT客户端接收主题数据OK

testlink docker搭建 docker搭建mqtt_eclipse_15

扩展验证:容器内订阅及发布内容消息验证(另外一种验证方式)

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

验证测试效果:

testlink docker搭建 docker搭建mqtt_eclipse_16