This is an automated email from the ASF dual-hosted git repository.

jbonofre pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq.git


The following commit(s) were added to refs/heads/main by this push:
     new 85276d3476 [AMQ-8149] Add tooling to create activemq docker image 
(including multi-platform support)
     new 046c36a381 Merge pull request #1036 from jbonofre/AMQ-8149
85276d3476 is described below

commit 85276d347688611672b797561de303e609ae9519
Author: JB Onofré <[email protected]>
AuthorDate: Wed Jun 21 11:47:55 2023 +0200

    [AMQ-8149] Add tooling to create activemq docker image (including 
multi-platform support)
---
 assembly/src/docker/Dockerfile         |  38 ++++++++
 assembly/src/docker/README.md          | 154 +++++++++++++++++++++++++++++++++
 assembly/src/docker/build.sh           | 133 ++++++++++++++++++++++++++++
 assembly/src/docker/docker-compose.yml |  39 +++++++++
 4 files changed, 364 insertions(+)

diff --git a/assembly/src/docker/Dockerfile b/assembly/src/docker/Dockerfile
new file mode 100644
index 0000000000..95338a2032
--- /dev/null
+++ b/assembly/src/docker/Dockerfile
@@ -0,0 +1,38 @@
+################################################################################
+#  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
+#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"]
diff --git a/assembly/src/docker/README.md b/assembly/src/docker/README.md
new file mode 100644
index 0000000000..f945c91b5a
--- /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.
diff --git a/assembly/src/docker/build.sh b/assembly/src/docker/build.sh
new file mode 100755
index 0000000000..7411ec0831
--- /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}" .
diff --git a/assembly/src/docker/docker-compose.yml 
b/assembly/src/docker/docker-compose.yml
new file mode 100644
index 0000000000..232ec86996
--- /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:-qctivemq}
+    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

Reply via email to