You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2020/08/27 12:02:48 UTC
[karaf] branch karaf-4.2.x updated: Feature/add build docker image
multi-platform (OS/Arch) (#1160)
This is an automated email from the ASF dual-hosted git repository.
jbonofre pushed a commit to branch karaf-4.2.x
in repository https://gitbox.apache.org/repos/asf/karaf.git
The following commit(s) were added to refs/heads/karaf-4.2.x by this push:
new 6add206 Feature/add build docker image multi-platform (OS/Arch) (#1160)
6add206 is described below
commit 6add20678879116e5445e5e5671c4338509f2c33
Author: Antonio Musarra <an...@gmail.com>
AuthorDate: Thu Aug 27 14:01:17 2020 +0200
Feature/add build docker image multi-platform (OS/Arch) (#1160)
Able to build docker image for multi-platform (OS/Arch)
(cherry picked from commit f7d9360dcbc44748bbd91217bea7f8a33b265f86)
---
assemblies/docker/Dockerfile | 2 +-
assemblies/docker/README.md | 55 +++++++++++++++++++++++++++++++++++++++++++-
assemblies/docker/build.sh | 31 ++++++++++++++++++++++---
3 files changed, 83 insertions(+), 5 deletions(-)
diff --git a/assemblies/docker/Dockerfile b/assemblies/docker/Dockerfile
index bc147fb..09fa2ea 100644
--- a/assemblies/docker/Dockerfile
+++ b/assemblies/docker/Dockerfile
@@ -16,7 +16,7 @@
# limitations under the License.
################################################################################
-FROM openjdk:8-jre
+FROM adoptopenjdk:11-jre-hotspot
# Karaf environment variables
ENV KARAF_INSTALL_PATH /opt
diff --git a/assemblies/docker/README.md b/assemblies/docker/README.md
index 0ddf667..fbb2bf6 100644
--- a/assemblies/docker/README.md
+++ b/assemblies/docker/README.md
@@ -26,9 +26,13 @@ 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 official Java Alpine (OpenJDK 8) image. If you want to
+Images are based on the Docker official [AdoptOpenJDK 11 JRE Hotspot](https://hub.docker.com/_/adoptopenjdk?tab=tags&page=1&name=11-jre-hotspot) image. If you want to
build the Karaf image run:
```
@@ -48,6 +52,55 @@ you can configure it with the `KARAF_VERSION` arg:
docker build --build-arg KARAF_VERSION=4.2.0 -t "karaf:4.2.0" karaf
```
+If you want to build the container for a specific version of Karaf 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):
+
+```
+./build.sh --from-release --karaf-version 4.2.9 --image-name amusarra/karaf:4.2.9 \
+ --build-multi-platform linux/arm64,linux/arm/v7,linux/amd64
+```
+
+Below is the output you should get from running the previous command.
+
+```
+Downloading apache-karaf-4.2.9.tar.gz from https://downloads.apache.org/karaf/4.2.9/
+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
+ => [internal] load build definition from Dockerfile 0.0s
+ => => transferring dockerfile: 32B 0.0s
+ => [internal] load .dockerignore 0.1s
+ => => transferring context: 2B 0.0s
+ => [linux/arm64 internal] load metadata for docker.io/library/openjdk:8u212-jre-alpine 2.5s
+ => [linux/arm/v7 internal] load metadata for docker.io/library/openjdk:8u212-jre-alpine 2.6s
+ => [linux/amd64 internal] load metadata for docker.io/library/openjdk:8u212-jre-alpine 2.5s
+ => [linux/amd64 1/3] FROM docker.io/library/openjdk:8u212-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193 0.0s
+ => => resolve docker.io/library/openjdk:8u212-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193 0.0s
+ => [internal] load build context 1.7s
+ => => transferring context: 22.69MB 1.7s
+ => [linux/arm64 1/3] FROM docker.io/library/openjdk:8u212-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193 0.0s
+ => [linux/arm/v7 1/3] FROM docker.io/library/openjdk:8u212-jre-alpine@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193 0.0s
+ => CACHED [linux/arm64 2/3] ADD _TMP_/apache-karaf-4.2.9.tar.gz /opt 0.0s
+ => CACHED [linux/arm64 3/3] RUN set -x && ln -s /opt/apache-karaf* /opt/apache-karaf 0.0s
+ => CACHED [linux/amd64 2/3] ADD _TMP_/apache-karaf-4.2.9.tar.gz /opt 0.0s
+ => CACHED [linux/amd64 3/3] RUN set -x && ln -s /opt/apache-karaf* /opt/apache-karaf 0.0s
+ => CACHED [linux/arm/v7 2/3] ADD _TMP_/apache-karaf-4.2.9.tar.gz /opt 0.0s
+ => CACHED [linux/arm/v7 3/3] RUN set -x && ln -s /opt/apache-karaf* /opt/apache-karaf 0.0s
+ => exporting to image 11.4s
+ => => exporting layers 0.0s
+ => => exporting manifest sha256:205fe4347d83e0183ff479360733d6294a8d060127d5a87ae0e06e1f9b18f08e 0.0s
+ => => exporting config sha256:94a9fb41574916225852575d3f1eda6f267d3e83dfc81e262e8a766b5b36e92f 0.0s
+ => => exporting manifest sha256:acb94fccec1b975a62b7385cf227e01afb5875d74c24a5bef4546381fd2a483e 0.0s
+ => => exporting config sha256:d2b0989d52cd13f19a02f7e88544f1e184bc592178608fd79c88d635f751707a 0.0s
+ => => exporting manifest sha256:47c72f3cb18db75f63c21da1e475958580f3d9c935930e1e8b04ccc7ad0e8a37 0.0s
+ => => exporting config sha256:13d3f0dc19bec1fec60767a4f5d19750f02401efa0aabc7f83fc318a96eaf660 0.0s
+ => => exporting manifest list sha256:341588c548bfe56818c6435d3301fee6e2e6b4b06e5bb94b15102c0ca86a90e9 0.0s
+ => => pushing layers 3.7s
+ => => pushing manifest for docker.io/amusarra/karaf:4.2.9
+```
+
## Run
* Run Karaf with interactive mode
diff --git a/assemblies/docker/build.sh b/assemblies/docker/build.sh
index 3e79174..0277448 100755
--- a/assemblies/docker/build.sh
+++ b/assemblies/docker/build.sh
@@ -21,11 +21,14 @@
usage() {
cat <<HERE
Usage:
- build.sh --from-local-dist [--archive <archive>] [--image-name <image>]
- build.sh --from-release --karaf-version <x.x.x> [--image-name <image>]
+ build.sh --from-local-dist [--archive <archive>] [--image-name <image>] [--build-multi-platform <comma-separated platforms>]
+ build.sh --from-release --karaf-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 'karaf'.
+ 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 [`openjdk:8u212-jre-alpine`](https://hub.docker.com/_/openjdk?tab=tags&page=1&name=8u212-jre-alpine).
+
HERE
exit 1
}
@@ -52,6 +55,10 @@ key="$1"
KARAF_VERSION="$2"
shift
;;
+ --build-multi-platform)
+ BUILD_MULTI_PLATFORM="$2"
+ shift
+ ;;
--help)
usage
;;
@@ -105,4 +112,22 @@ else
fi
-docker build --build-arg karaf_dist="${KARAF_DIST}" -t "${IMAGE_NAME}" .
+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 -1
+ fi
+
+fi
+
+docker ${BUILD_X} build ${BUILD_X_PLATFORM} --build-arg karaf_dist="${KARAF_DIST}" ${BUILD_X_FLAG} -t "${IMAGE_NAME}" .