使用docker快速构建ActiveMQ

  鉴于官方没有推出activemq的官方镜像,所以我们需要自己来制作了,先来一波准备工作:

  准备工作

  首先需要去官网下载activemq,地址:https://archive.apache.org/dist/activemq/5.17.1/

  比如这里我选择了5.17.1版本:

  

  因为activemq需要java的运行环境,所以还需要去下载jdk或者jre,地址:https://www.oracle.com/java/technologies/downloads/

  貌似从5.17开始,activemq需要高版本的jdk支持了,所以这里我选择jdk18:

  

  开始构建

  为了偷懒,我决定采用docker-compose来编排:

  最开始,我们的目录是这样子的:

  

  接着,执行下面的命令:  

    # 解压得到activemq.xml和jetty.xml两个配置文件
    tar -zxf apache-activemq-5.17.1-bin.tar.gz apache-activemq-5.17.1/conf/activemq.xml apache-activemq-5.17.1/conf/jetty.xml && \
    mv apache-activemq-5.17.1/conf/* ./ && \
    rm -rf apache-activemq-5.17.1
    # 上海的时区
    cp /usr/share/zoneinfo/Asia/Shanghai ./

  现在,我们的目录是这个样子的:

  

  这里,我们把activemq的两个主要配置弄出来了,当然是要修改它了:

  修改activemq.xml,在里面的broker节点下添加认证用户信息,这个用户是我们使用代码连接使用activemq的那个认证用户:  

    <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}">
        
        <!--broker其它配置-->
        
        <plugins>
            <simpleAuthenticationPlugin>
                <users>
                     <authenticationUser username="test" password="123456" groups="users,admins"/>
                </users>
            </simpleAuthenticationPlugin>
         </plugins>
    </broker>

  修改jetty.xml,activemq的web管理后台默认是本地127.0.0.1启动,这样外面就没办法访问了,修改名称为jettyPort的bean的host属性为0.0.0.0:  

    <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start">
             <!-- the default port number for the web console -->
        <property name="host" value="0.0.0.0"/>
        <property name="port" value="8161"/>
    </bean>

  好了,至于其它配置,可以按照自己的需求来,接着外面创建一个Dockerfile:  

    FROM ubuntu:latest

    WORKDIR /opt

    ADD *.tar.gz /opt/

    COPY Shanghai /usr/share/zoneinfo/Asia/Shanghai

    RUN mv /opt/jdk* /opt/jdk && \
        mv /opt/apache-activemq* /opt/apache-activemq && \
        ln -s /opt/jdk/bin/java /usr/bin/java && \
        rm -f /etc/localtime && \
        ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    EXPOSE 61616 
    EXPOSE 5672
    EXPOSE 61613
    EXPOSE 1883
    EXPOSE 61614
    EXPOSE 8161

    USER root

    CMD [ "/opt/apache-activemq/bin/activemq", "console" ]

  这里我是基于ubuntu:latest来构建的,当然也可以是centos

  接着我们创建一个docker-compose.yml:

docker-compose.yml
# yaml 配置
version: '2'
services:
  activemq:
    build: .
    image: activemq:v1
    container_name: activemq
    restart: always
    expose:
      - 61616
      - 8161
    ports:
      - 61616:61616
      #- 5672:5672
      - 61613:61613
      - 1883:1883
      - 61614:61614
      - 8161:8161
    volumes:
      - ./activemq.xml:/opt/apache-activemq/conf/activemq.xml
      - ./jetty.xml:/opt/apache-activemq/conf/jetty.xml
networks:
  default:
    driver: bridge

   这里我将activemq.xml和jetty.xml两个配置文件使用数据卷将他们关联起来了。

  此外,我这里将宿主机的61616和8161端口做了端口映射,61616是OpenWrite协议端口,8161是管理后台端口,如果要开放其它端口,如amqp的5672,可以类似的添加即可,但是需要注意的是,rabbitmq默认也是使用5672作为amqp协议的端口,所以可能会出现端口冲突。

  好了,最后我们的目录是这样子的:

  

  接着,我们就可以使用docker-compose来启动了:  

    sudo docker-compose up -d

  然后等待片刻,容器起来后,在浏览器中访问宿主机的8161端口(比如我的是:http://192.168.139.128:8161/),可能会要求输入账号密码,这里账号密码默认都是admin,进去之后大概是这样子的:

   

 

posted @ 2022-06-15 18:26  没有星星的夏季  阅读(1728)  评论(0编辑  收藏  举报