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}" .