diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2022-05-13 20:47:42 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2022-05-13 20:48:09 +0200 |
commit | a9074952662c7d71df98ddc0a7e4f7e33c29b4bc (patch) | |
tree | dcb96d8e34973f128df556b6afe9aa3b2ce8f849 /openjdk-runtime | |
parent | 335422b369f43596f5498a622f3440a102f67954 (diff) |
Import from MulkCMS 2.
Change-Id: I8b2f6d4833ee606b59264b368df7110039b722d7
Diffstat (limited to 'openjdk-runtime')
-rw-r--r-- | openjdk-runtime/.gitignore | 6 | ||||
-rw-r--r-- | openjdk-runtime/Dockerfile | 30 | ||||
-rw-r--r-- | openjdk-runtime/README.adoc | 69 | ||||
-rwxr-xr-x | openjdk-runtime/build | 36 | ||||
-rwxr-xr-x | openjdk-runtime/prepare | 16 |
5 files changed, 157 insertions, 0 deletions
diff --git a/openjdk-runtime/.gitignore b/openjdk-runtime/.gitignore new file mode 100644 index 0000000..3ed2fbd --- /dev/null +++ b/openjdk-runtime/.gitignore @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: © 2022 Matthias Andreas Benkard <code@mail.matthias.benkard.de> +# +# SPDX-License-Identifier: GPL-3.0-or-later + +/cache +/jdk-dist diff --git a/openjdk-runtime/Dockerfile b/openjdk-runtime/Dockerfile new file mode 100644 index 0000000..ad41771 --- /dev/null +++ b/openjdk-runtime/Dockerfile @@ -0,0 +1,30 @@ +# SPDX-FileCopyrightText: © 2022 Matthias Andreas Benkard <code@mail.matthias.benkard.de> +# +# SPDX-License-Identifier: GPL-3.0-or-later + +FROM registry.access.redhat.com/ubi8/ubi-minimal:latest AS ubi-minimal + +# Add OpenJDK (complete). +ADD jdk-dist/latest.tar.gz /jdk + +# JLink a trimmed JDK. +RUN microdnf --assumeyes --nodocs install binutils +RUN /jdk/*/bin/jlink \ + -J-XX:MaxRAMPercentage=75 \ + --add-modules java.base,java.instrument,java.naming,java.rmi,java.scripting,java.security.jgss,java.security.sasl,java.sql,jdk.compiler,jdk.jconsole,jdk.unsupported \ + --compress=1 \ + --no-man-pages \ + --strip-debug \ + --output /java +RUN /java/bin/java -Xshare:dump + +# Set mtimes to @0 for reproducibility. +RUN microdnf --assumeyes --nodocs install findutils +RUN find /java -exec touch --date=@0 '{}' ';' + +# Build the final image. +FROM registry.access.redhat.com/ubi8/ubi-micro:latest +COPY --from=ubi-minimal /lib64/libz.so.1 /lib64/ +COPY --from=ubi-minimal /java /java +ENV JAVA_HOME=/java +ENV PATH=/java/bin:$PATH diff --git a/openjdk-runtime/README.adoc b/openjdk-runtime/README.adoc new file mode 100644 index 0000000..8687266 --- /dev/null +++ b/openjdk-runtime/README.adoc @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: © 2022 Matthias Andreas Benkard <code@mail.matthias.benkard.de> +// +// SPDX-License-Identifier: GFDL-1.3-or-later + += openjdk-runtime +Matthias Andreas Benkard +// Meta +:experimental: +:data-uri: +:sectnums: +:toc: +:stem: +:keywords: mulk +// Settings +:icons: font +:source-highlighter: rouge + +A container image that contains an OpenJDK runtime suitable for running +modern web services. + + +== Summary + +This container image ships the latest OpenJDK feature release from +https://jdk.java.net[jdk.java.net] on top of a +https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/building_running_and_managing_containers/assembly_types-of-container-images_building-running-and-managing-containers#con_understanding-the-ubi-micro-images_assembly_types-of-container-images[Red +Hat UBI Micro] base. + +The module set was selected for +https://gerrit.benkard.de/plugins/gitiles/mulkcms2/[MulkCMS 2], which +is a typical Quarkus application. It will very likely work for other +typical Quarkus applications. + + +== Building + +[source,shell] +---- +./prepare +docker build -t $IMAGE_NAME . +---- + + +== Customization + +You may want to customize the module set included in the JDK. + +For example, specifying `ALL-MODULE-PATH` includes all modules +included in the OpenJDK distribution: + +[source,dockerfile] +---- +RUN /jdk/*/bin/jlink \ + -J-XX:MaxRAMPercentage=75 \ + --add-modules ALL-MODULE-PATH \ #<1> + --compress=1 \ + --no-man-pages \ + --strip-debug \ + --output /java +---- +<1> Include all JDK modules. + + +== Usage + +[source,shell] +---- +docker run $IMAGE_NAME java -version +---- diff --git a/openjdk-runtime/build b/openjdk-runtime/build new file mode 100755 index 0000000..01347d7 --- /dev/null +++ b/openjdk-runtime/build @@ -0,0 +1,36 @@ +#! /bin/sh +# SPDX-FileCopyrightText: © 2022 Matthias Andreas Benkard <code@mail.matthias.benkard.de> +# +# SPDX-License-Identifier: GPL-3.0-or-later + +set -euo pipefail + +cd "$(dirname $(readlink -e "$0"))" + +image=docker.benkard.de/mulk/openjdk-runtime:latest +use_kaniko=no + +./prepare + +if [[ "${use_kaniko}" == yes ]]; then + docker run \ + --mount type=bind,src="$PWD",target=/workspace \ + gcr.io/kaniko-project/warmer:latest \ + --cache-dir=/workspace/cache \ + --image=registry.access.redhat.com/ubi8/ubi-micro:latest \ + --image=registry.access.redhat.com/ubi8/ubi-minimal:latest + + docker run \ + --mount type=bind,src="$PWD",target=/workspace \ + --mount type=bind,src="$HOME/.docker",target=/root/.docker,ro=true \ + gcr.io/kaniko-project/executor:latest \ + --dockerfile Dockerfile \ + --destination "${image}" \ + --context dir:///workspace/ \ + --cache=true \ + --cache-ttl=16800h0m0s \ + --reproducible=true +else + docker build -t "${image}" . + docker push "${image}" +fi diff --git a/openjdk-runtime/prepare b/openjdk-runtime/prepare new file mode 100755 index 0000000..f0fddba --- /dev/null +++ b/openjdk-runtime/prepare @@ -0,0 +1,16 @@ +#! /bin/sh +# SPDX-FileCopyrightText: © 2022 Matthias Andreas Benkard <code@mail.matthias.benkard.de> +# +# SPDX-License-Identifier: GPL-3.0-or-later + +set -euo pipefail + +cd "$(dirname $(readlink -e "$0"))" + +openjdk_package_info=$(curl "https://api.foojay.io/disco/v2.0/packages?package_type=jdk&latest=per_distro&directly_downloadable=true&release_status=ga&javafx_bundled=false&operating_system=linux&architecture=x64&archive_type=tar.gz&distro=oracle_open_jdk") + +openjdk_package_uri=$(jq -r '.result[0].links.pkg_download_redirect' <<<"${openjdk_package_info}") +openjdk_package_filename=$(jq -r '.result[0].filename' <<<"${openjdk_package_info}") +curl --fail --create-dirs -C - -o "jdk-dist/${openjdk_package_filename}" "${openjdk_package_uri}" + +ln -svf "${openjdk_package_filename}" "jdk-dist/latest.tar.gz" |