mirror of https://github.com/apache/activemq.git
Merge pull request #1036 from jbonofre/AMQ-8149
[AMQ-8149] Add tooling to create activemq docker image (including multi-platform support)
This commit is contained in:
commit
046c36a381
|
@ -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"]
|
|
@ -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.
|
|
@ -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}" .
|
|
@ -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
|
Loading…
Reference in New Issue