鉴于官方没有推出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,进去之后大概是这样子的: