Skip to content

Commit

Permalink
Add docker resources for ActiveMQ 5.x
Browse files Browse the repository at this point in the history
  • Loading branch information
jbonofre committed Oct 22, 2023
1 parent af79174 commit fab06fa
Show file tree
Hide file tree
Showing 4 changed files with 366 additions and 0 deletions.
40 changes: 40 additions & 0 deletions assembly/src/docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################

FROM eclipse-temurin:11-jre

# ActiveMQ environment variables
ENV ACTIVEMQ_INSTALL_PATH /opt
ENV ACTIVEMQ_HOME $ACTIVEMQ_INSTALL_PATH/apache-activemq
ENV ACTIVEMQ_EXEC exec
ENV PATH $PATH:$ACTIVEMQ_HOME/bin
# Make the Web console accessible from outside the container
ENV ACTIVEMQ_OPTS $ACTIVEMQ_OPTS -Djetty.host=0.0.0.0
#WORKDIR $ACTIVEMQ_HOME

# activemq_dist can point to a directory or a tarball on the local system
ARG activemq_dist=NOT_SET

# Install build dependencies and activemq
ADD $activemq_dist $ACTIVEMQ_INSTALL_PATH
RUN set -x && \
cp -r $ACTIVEMQ_INSTALL_PATH/apache-activemq-* $ACTIVEMQ_HOME && \
rm -r $ACTIVEMQ_INSTALL_PATH/apache-activemq-*

EXPOSE 8161 61616 5672 61613 1883 61614
CMD ["activemq", "console"]
154 changes: 154 additions & 0 deletions assembly/src/docker/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# Apache ActiveMQ docker

## Installation

Install the most recent stable version of docker
https://docs.docker.com/installation/

Install the most recent stable version of docker-compose
https://docs.docker.com/compose/install/

If you want to build multi-platform (OS/Arch) Docker images, then you must install
[`buildx`](https://docs.docker.com/buildx/working-with-buildx/).
On macOS, an easy way to install `buildx` is to install [Docker Desktop Edge](https://docs.docker.com/docker-for-mac/edge-release-notes/).

## Build

Images are based on the Docker official [Eclipse Temurin 11 JRE](https://hub.docker.com/_/eclipse-temurin/tags?page=1&name=11-jre) image. If you want to
build the ActiveMQ image you have the following choices:

1. Create the docker image from a local distribution package
2. Create the docker image from an Apache ActiveMQ archive, for example (apache-activemq-5.18.1.tar.gz)
3. Create the docker image from a specific version of Apache ActiveMQ
4. Create the docker image from remote or local custom Apache ActiveMQ distribution

If you run `build.sh` without arguments then you could see how to usage this command.

```bash
Usage:
build.sh --from-local-dist [--archive <archive>] [--image-name <image>] [--build-multi-platform <comma-separated platforms>]
build.sh --from-release --activemq-version <x.x.x> [--image-name <image>] [--build-multi-platform <comma-separated platforms>]
build.sh --help

If the --image-name flag is not used the built image name will be 'activemq'.
Check the supported build platforms; you can verify with this command: docker buildx ls
The supported platforms (OS/Arch) depend on the build's base image, in this case [eclipse-temurin:11-jre](https://hub.docker.com/_/eclipse-temurin).
```
To create the docker image from local distribution) you can execute the command
below. Remember that before you can successfully run this command, you must build
the project (for example with the command `mvn clean install -DskipTests`).
```bash
./build.sh --from-local-dist
```
For create the docker image from the local dist version but with the archive,
you can execute the below command. Remember that before you can successfully run
this command.
```bash
./build.sh --from-local-dist --archive ~/path/to/apache-activemq-5.18.1.tar.gz
```
You can also specify the image name with the `--image-name` flag, for example
(replacing the version, image name, and targets as appropriate):
```bash
./build.sh --from-local-dist --archive ~/Downloads/apache-activemq-5.18.1.tar.gz --image-name myrepo/myamq:x.x.x
```
If you want to build the docker image for a specific version of ActiveMQ
you can run `build.sh` command in this way (replacing the version, image name,
and targets as appropriate):
```bash
./build.sh --from-release --activemq-version 5.18.1 --image-name myrepo/myamq:x.x.x
```
If you want to build the container for a specific version of ActiveMQ and
specific version of the platform, and push the image to the Docker Hub repository,
you can use this command (replacing the version, image name, and targets as appropriate):
```bash
./build.sh --from-release --activemq-version 5.18.1 --image-name myrepo/myamq:x.x.x \
--build-multi-platform linux/arm64,linux/arm/v7,linux/amd64
```
Below is the output you should get from running the previous command.
```
Downloading apache-activemq-5.18.1.tar.gz from https://downloads.apache.org/activemq/5.18.1/
Checking if buildx installed...
Found buildx {github.com/docker/buildx v0.3.1-tp-docker 6db68d029599c6710a32aa7adcba8e5a344795a7} on your docker system
Starting build of the docker image for the platform linux/arm64,linux/arm/v7,linux/amd64
[+] Building 15.8s (16/16) FINISHED
...
```
## Run
* Run ActiveMQ
```
docker-compose run activemq activemq
```
or
```
docker run --name activemq activemq activemq
```
* Run ActiveMQ as a daemon
```
docker-compose up
```
or
```
docker run --name activemq
```
* Kill ActiveMQ
```
docker-compose kill
```
or
```
docker kill activemq
```
### Ports
* ActiveMQ web console on `8161`
* ActiveMQ tcp connector on `61616`
* ActiveMQ AMQP connector on `5672`
* ActiveMQ STOMP connector on `61613`
* ActiveMQ MQTT connector on `1883`
* ActiveMQ WS connector on `61614`
Edit the `docker-compose.yml` file to edit port settings.
133 changes: 133 additions & 0 deletions assembly/src/docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/bin/sh

################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################

usage() {
cat <<HERE
Usage:
build.sh --from-local-dist [--archive <archive>] [--image-name <image>] [--build-multi-platform <comma-separated platforms>]
build.sh --from-release --activemq-version <x.x.x> [--image-name <image>] [--build-multi-platform <comma-separated platforms>]
build.sh --help
If the --image-name flag is not used the built image name will be 'activemq'.
Check the supported build platforms; you can verify with this command: docker buildx ls
The supported platforms (OS/Arch) depend on the build's base image, in this case [eclipse-temurin:11-jre](https://hub.docker.com/_/eclipse-temurin).
HERE
exit 1
}

while [ $# -ge 1 ]
do
key="$1"
case $key in
--from-local-dist)
FROM_LOCAL="true"
;;
--from-release)
FROM_RELEASE="true"
;;
--image-name)
IMAGE_NAME="$2"
shift
;;
--archive)
ARCHIVE="$2"
shift
;;
--activemq-version)
ACTIVEMQ_VERSION="$2"
shift
;;
--build-multi-platform)
BUILD_MULTI_PLATFORM="$2"
shift
;;
--help)
usage
;;
*)
# unknown option
;;
esac
shift
done

IMAGE_NAME=${IMAGE_NAME:-activemq}

# TMPDIR must be contained within the working directory so it is part of the
# Docker context. (i.e. it can't be mktemp'd in /tmp)
TMPDIR=_TMP_

cleanup() {
rm -rf "${TMPDIR}"
}
trap cleanup EXIT

mkdir -p "${TMPDIR}"

if [ -n "${FROM_RELEASE}" ]; then

[ -n "${ACTIVEMQ_VERSION}" ] || usage

ACTIVEMQ_BASE_URL="https://dlcdn.apache.org/activemq/${ACTIVEMQ_VERSION}/"
ACTIVEMQ_DIST_FILE_NAME="apache-activemq-${ACTIVEMQ_VERSION}-bin.tar.gz"
CURL_OUTPUT="${TMPDIR}/${ACTIVEMQ_DIST_FILE_NAME}"

echo "Downloading ${ACTIVEMQ_DIST_FILE_NAME} from ${ACTIVEMQ_BASE_URL}"
curl -s "${ACTIVEMQ_BASE_URL}${ACTIVEMQ_DIST_FILE_NAME}" --output "${CURL_OUTPUT}"

ACTIVEMQ_DIST="${CURL_OUTPUT}"

elif [ -n "${FROM_LOCAL}" ]; then

if [ -n "${ARCHIVE}" ]; then
DIST_DIR=${ARCHIVE}
else
DIST_DIR="target/apache-activemq-*.tar.gz"
fi
ACTIVEMQ_DIST=${TMPDIR}/apache-activemq.tar.gz
echo "Using ActiveMQ dist: ${DIST_DIR}"
cp ${DIST_DIR} ${ACTIVEMQ_DIST}

else

usage

fi

if [ -n "${BUILD_MULTI_PLATFORM}" ]; then
echo "Checking if buildx installed..."
VERSION_BUILD_X=$(docker buildx version) > /dev/null 2>&1

if [ $? -eq 0 ]; then
echo "Found buildx {${VERSION_BUILD_X}} on your docker system"
echo "Starting build of the docker image for the platform ${BUILD_MULTI_PLATFORM}"

BUILD_X="buildx"
BUILD_X_FLAG="--push"
BUILD_X_PLATFORM="--platform ${BUILD_MULTI_PLATFORM}"
else
echo "Error: buildx not installed with your docker system"
exit 2
fi

fi

docker ${BUILD_X} build ${BUILD_X_PLATFORM} --build-arg activemq_dist="${ACTIVEMQ_DIST}" ${BUILD_X_FLAG} -t "${IMAGE_NAME}" .
39 changes: 39 additions & 0 deletions assembly/src/docker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
################################################################################

version: "2.1"
services:
activemq:
image: ${ACTIVEMQ_DOCKER_IMAGE_NAME:-activemq}
expose:
- "61616"
- "5672"
- "61613"
- "1883"
- "61614"
- "8161"
ports:
- "8161:8161"
- "61616:61616"
- "5672:5672"
- "61613:61613"
- "1883:1883"
- "61614:61614"
command: activemq console
stdin_open: true
tty: true

0 comments on commit fab06fa

Please sign in to comment.