项目需要物联网设备接入,为了开发方便,自己本机搭建了简易物联网服务器环境,方便开发。网上没有合适的docker镜像文件,我自己以jdk8为基础,手动在容器中安装了MQTT服务器。并实现了主机访问和MQTT服务器随容器启动。
操作系统:Windows 10 家庭版
Oracle VM VirtualBox:版本 6.0.10 r132072 (Qt5.6.2)
Ubuntu:16.04.6-desktop-amd64
docker:18.09.7
jdk:1.8.*
ActiveMQ Artemis:2.19.1
1.安装jdk8容器
sudo docker run -itd -p 1883:1883 -p 8161:8161 -p 61616:61616 --restart=always --name openjdk8 adoptopenjdk/openjdk8
2.安装ActiveMQ Artemis
在ubuntu中,用浏览器下载了ActiveMQ Artemis2.19.1。或者自己去找需要的版本。
下载的路径为:/home/potato/下载/apache-artemis-2.19.1-bin.tar.gz
把压缩包解压,并复制到容器里面。
- sudo tar -zxvf apache-artemis-2.19.1-bin.tar.gz
- sudo docker cp /home/potato/下载/apache-artemis-2.19.1 openjdk8:/opt/artemis2.19.1
进入容器并初始化ActiveMQ Artemis。初始化设置了默认帐号为potato,默认密码为1。初始化的实例artemisinstance路径在/opt/artemis2.19.1/bin/artemisinstance中。
- sudo docker exec -it openjdk8 /bin/bash
- cd /opt/artemis2.19.1/bin
- ./artemis create --user potato --password 1 --role admins --http-host 0.0.0.0 --allow-anonymous true artemisinstance
3.启动ActiveMQ Artemis
- cd artemisinstance/bin
- ./artemis-service start
4.把ActiveMQ Artemis设置为随容器启动
思路比较简单,写一个启动脚本,然后把这个脚本加入容器的启动中。
在Ubuntu系统新建文件start_artemis2.19.1.sh
touch /tmp/start_artemis2.19.1.sh
手工去打开编辑,文件内容为:
- cd /opt/artemis2.19.1/bin/artemisinstance/bin
- ./artemis-service start
在Ubuntu系统新建文件1.bashrc
touch /tmp/1.bashrc
手工去打开编辑,文件内容为:
- # startup run
- if [ -f /root/start_artemis2.19.1.sh ]; then
- ./root/start_artemis2.19.1.sh
- fi
复制2个文件到容器内部对应位置
- sudo docker cp /tmp/start_artemis2.19.1.sh openjdk8:/root/start_artemis2.19.1.sh
- sudo docker cp /tmp/1.bashrc openjdk8:/root/.bashrc
进入容器,并将start_artemis2.19.1.sh文件设置为可执行脚本。
- sudo docker exec -it openjdk8 /bin/bash
- chmod +x /root/start_artemis2.19.1.sh
5.端口映射到开发电脑
过程忽略,跟之前的tomcat映射到开发机差不多。主要就是映射了1883、8161、61616。
测试用的是MQTT X。主页是MQTT X:跨平台 MQTT 5.0 桌面客户端工具。下载地址是https://www.emqx.com/zh/downloads/MQTTX/v1.8.3/MQTTX-Setup-1.8.3-x64.exe
1.设置语言为中文
一路安装默认完成后,修改语言为中文。
2.新建连接
就填了上图中的4个框,其他都是默认的。
点击连接啦:
连接后提示连接成功
3.设备信息模拟测试
添加一个订阅,发一个消息。
默认点确定就行。
点了 右下角的发送按钮(有的屏幕小,不一定看的到,要注意)后就发现,消息发送和监听都是正常的。
我不熟悉linux、Ubuntu、docker、ActiveMQ Artemis等,过程中遇到的主要点是:
1.Ubuntu中下载的软件解压
2.Ubuntu中的文件夹复制到容器里面
3.安装ActiveMQ Artemis不像传统的tomcat,解压就启动,还要构建一个运行的实例(或者叫文件夹)。新建的文件夹bin下面的才用来启动。
4.把容器里面已经可以运行、访问的软件ActiveMQ Artemis加入容器的启动,伴随容器的启动而自动启动。之前用的镜像中心的那些镜像,都是安装后能够伴随容器启动而自动启动的。所以,我手动实现了这一步。
5.编辑文件,我也不太会,还是用的可视化的工具。