• ubuntu中docker安装MQTT服务器ApacheActiveMQ Artemis


    一.背景

            项目需要物联网设备接入,为了开发方便,自己本机搭建了简易物联网服务器环境,方便开发。网上没有合适的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

    把压缩包解压,并复制到容器里面。

    1. sudo tar -zxvf apache-artemis-2.19.1-bin.tar.gz
    2. 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中。

    1. sudo docker exec -it openjdk8 /bin/bash
    2. cd /opt/artemis2.19.1/bin
    3. ./artemis create --user potato --password 1 --role admins --http-host 0.0.0.0 --allow-anonymous true artemisinstance

    3.启动ActiveMQ Artemis

    1. cd artemisinstance/bin
    2. ./artemis-service start

    4.把ActiveMQ Artemis设置为随容器启动

    思路比较简单,写一个启动脚本,然后把这个脚本加入容器的启动中。

    在Ubuntu系统新建文件start_artemis2.19.1.sh

    touch /tmp/start_artemis2.19.1.sh

    手工去打开编辑,文件内容为:

    1. cd /opt/artemis2.19.1/bin/artemisinstance/bin
    2. ./artemis-service start

    在Ubuntu系统新建文件1.bashrc

    touch /tmp/1.bashrc

    手工去打开编辑,文件内容为:

    1. # startup run
    2. if [ -f /root/start_artemis2.19.1.sh ]; then
    3. ./root/start_artemis2.19.1.sh
    4. fi

    复制2个文件到容器内部对应位置

    1. sudo docker cp /tmp/start_artemis2.19.1.sh openjdk8:/root/start_artemis2.19.1.sh
    2. sudo docker cp /tmp/1.bashrc openjdk8:/root/.bashrc

    进入容器,并将start_artemis2.19.1.sh文件设置为可执行脚本。

    1. sudo docker exec -it openjdk8 /bin/bash
    2. 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.编辑文件,我也不太会,还是用的可视化的工具。

  • 相关阅读:
    搞个微信小程序002:个人信息
    K8s:Pod 中 command、args 与 Dockerfile 中 CMD、 ENTRYPOINT 的对应关系
    《XSS-Labs》01. Level 1~10
    《微服务实战》 第十八章 Redis查看配置文件和数据类型
    计算机网络相关知识点(二)
    零基础小白怎么自学 Python ,大概要多久?
    centos7配置
    剖析 Kafka 消息丢失的原因
    python分支结构的花样玩法(一)
    AcWing 668. 游戏时间2
  • 原文地址:https://blog.csdn.net/qq_37372909/article/details/127657137