This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch activemq-5.17.x
in repository https://gitbox.apache.org/repos/asf/activemq.git
The following commit(s) were added to refs/heads/activemq-5.17.x by this push:
new fab06faac Add docker resources for ActiveMQ 5.x
fab06faac is described below
commit fab06faacea37ebcc87ae1a6cb7698e4f99b2fa9
Author: Jean-Baptiste Onofré <[email protected]>
AuthorDate: Sun Oct 22 18:13:09 2023 +0200
Add docker resources for ActiveMQ 5.x
---
assembly/src/docker/Dockerfile | 40 +++++++++
assembly/src/docker/README.md | 154 +++++++++++++++++++++++++++++++++
assembly/src/docker/build.sh | 133 ++++++++++++++++++++++++++++
assembly/src/docker/docker-compose.yml | 39 +++++++++
4 files changed, 366 insertions(+)
diff --git a/assembly/src/docker/Dockerfile b/assembly/src/docker/Dockerfile
new file mode 100644
index 000000000..683e5b514
--- /dev/null
+++ b/assembly/src/docker/Dockerfile
@@ -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"]
\ No newline at end of file
diff --git a/assembly/src/docker/README.md b/assembly/src/docker/README.md
new file mode 100644
index 000000000..d76ddabc5
--- /dev/null
+++ b/assembly/src/docker/README.md
@@ -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.
\ No newline at end of file
diff --git a/assembly/src/docker/build.sh b/assembly/src/docker/build.sh
new file mode 100644
index 000000000..3f30a7bbe
--- /dev/null
+++ b/assembly/src/docker/build.sh
@@ -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}" .
\ No newline at end of file
diff --git a/assembly/src/docker/docker-compose.yml
b/assembly/src/docker/docker-compose.yml
new file mode 100644
index 000000000..07072b168
--- /dev/null
+++ b/assembly/src/docker/docker-compose.yml
@@ -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
\ No newline at end of file