Run & Build ActiveMQ Docker Image

Recently, I needed to work with ActiveMQ. As a docker fan, I couldn’t find the latest version (5.17.2) docker image available. Thus, I decided to build one.

It turned out that building a docker image for ActiveMQ is quite simple. For example, here is the Dockerfile for ActiveMQ version 5.17.2 on JRE 19, alpine:

FROM eclipse-temurin:19-jre-alpine as build

ENV ACTIVEMQ_VERSION 5.17.2
ENV ACTIVEMQ apache-activemq-$ACTIVEMQ_VERSION
ENV ACTIVEMQ_TCP=61616 ACTIVEMQ_AMQP=5672 ACTIVEMQ_STOMP=61613 ACTIVEMQ_MQTT=1883 ACTIVEMQ_WS=61614 ACTIVEMQ_UI=8161
ENV SHA512_VAL=7c6ee4c1a9f58ccaa374d8528255d55c181c3402855fe06202bb30f722bdbd69a2cebaf0eded67324f94b4158b6d8d97b621d8730d92676e51b982ed4fc8a7b0

ENV USER_ID=65535
ENV GROUP_ID=65535
ENV USER_NAME=activemq
ENV GROUP_NAME=activemq

RUN apk add curl
RUN curl "https://archive.apache.org/dist/activemq/$ACTIVEMQ_VERSION/$ACTIVEMQ-bin.tar.gz" -o $ACTIVEMQ-bin.tar.gz

# Validate checksum
RUN if [ "$SHA512_VAL" != "$(sha512sum $ACTIVEMQ-bin.tar.gz | awk '{print($1)}')" ];\
    then \
        echo "sha512 values doesn't match! exiting."  && \
        exit 1; \
    fi;


RUN tar -xzf $ACTIVEMQ-bin.tar.gz -C  /opt && \
    addgroup -g $GROUP_ID $GROUP_NAME && \
    adduser --shell /sbin/nologin --disabled-password \
    --no-create-home --uid $USER_ID --ingroup $GROUP_NAME $USER_NAME && \
    chown -R $USER_NAME:$GROUP_NAME /opt/$ACTIVEMQ && \
    sed -i 's/127.0.0.1/0.0.0.0/g' /opt/$ACTIVEMQ/conf/jetty.xml

USER activemq

WORKDIR /opt/$ACTIVEMQ
EXPOSE $ACTIVEMQ_TCP $ACTIVEMQ_AMQP $ACTIVEMQ_STOMP $ACTIVEMQ_MQTT $ACTIVEMQ_WS $ACTIVEMQ_UI

CMD ["/bin/sh", "-c", "./bin/activemq console"]

Build ActiveMQ docker image for a different version

You can reuse the Dockerfile above to build other images on different JRE versions. However, there are some things you need to pay attention to:

  1. Replace the correct ACTIVEMQ_VERSION (in the file above, it’s 5.17.2)
  2. Replace the correct SHA512_VAL version. You can get this value on the download page.

That’s all you need to build a new docker image for ActiveMQ.

Running ActiveMQ container

Running an ActiveMQ container is quite simple. For example, this command runs ActiveMQ 5.17.2

docker run -p 61616:61616 -p 8161:8161 codingpuss/activemq:5.17.2-jre-19-alpine

In the example above, I mapped port 8186 for web admin and port 61616 for TCP. If you need other protocols, map them accordingly. All the ports for each protocol are available at line 5 of the Dockerfile above.

For more information and all tags, you can checkout this Docker hub page

Leave a Comment