Namespace
halohub
Image / Tag
halo-pro:sha-2d333f4
Content Digest
sha256:107458847f7de0bd7c1ce6e4262888d99b7a53dc04345eea4075b5b10caf56f5
Details
Created

2025-12-15 14:36:14 UTC

Size

247 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2025-12-15T14:35:09.556Z
  • org.opencontainers.image.description
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2d333f40c31a41d65a79a3e7d8d8e2bbe885e7ef
  • org.opencontainers.image.source
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.title
    halo-pro
  • org.opencontainers.image.url
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.version
    2.22.0-alpha.2

Environment
HALO_WORK_DIR

/root/.halo2

JAVA_HOME

/opt/java/openjdk

JAVA_TOOL_OPTIONS

-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

JAVA_VERSION

jdk-21.0.9+10_openj9-0.56.0

JVM_OPTS

-Xmx256m -Xms256m

LANG

en_US.UTF-8

LANGUAGE

en_US:en

LC_ALL

en_US.UTF-8

PATH

/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SPRING_CONFIG_LOCATION

optional:classpath:/;optional:file:/root/.halo2/

TZ

Asia/Shanghai


Layers

[#000] sha256:20043066d3d5c78b45520c5707319835ac7d1f3d7f0dded0138ea0897d6a3188 - 11.48% (28.3 MB)

[#001] sha256:5dc05516bf272dea239480f9ec3135e8091742b6a81f6ea2ee6b4588193bfb37 - 4.94% (12.2 MB)

[#002] sha256:85f1350eacbd1c95686c8d2511cdc59efaeb8de6ce3fbe28bcd613e0765da0ee - 23.11% (57.1 MB)

[#003] sha256:c0aa591fb4fe8835ddfb52ecf9fcaeead21bfdb24484e7578126fb523f15cbef - 2.08% (5.13 MB)

[#004] sha256:7706f90be981306564b595d866c985ecd1c3019d4c1744c87b35b00f6af81dfc - 0.0% (101 Bytes)

[#005] sha256:7c52da45700fe663d17aed09b516cbf7ba330919701274a29b6d019079ce5cce - 50.84% (126 MB)

[#006] sha256:fd98740e8de6fbf8bc59d8b430952d6eae7e34568f70182943a27389364e140e - 0.05% (130 KB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:a95060f715d73c56e1f1a4c27e3e774d9408adca480abe3bffda589a3e2acaed - 7.5% (18.5 MB)

[#009] sha256:71f89f90e8ec644e4c980e4d716d72b0377589c14131391f3d36f54365efe226 - 0.0% (192 Bytes)


History
2025-10-16 19:23:01 UTC

/bin/sh -c #(nop) ARG RELEASE

2025-10-16 19:23:01 UTC

/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH

2025-10-16 19:23:01 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu

2025-10-16 19:23:01 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04

2025-10-16 19:23:03 UTC

/bin/sh -c #(nop) ADD file:ddf1aa62235de6657123492b19d27d937c25668011b5ebf923a3f019200f8540 in /

2025-10-16 19:23:03 UTC

/bin/sh -c #(nop) CMD ["/bin/bash"]

2025-12-01 23:11:14 UTC (buildkit.dockerfile.v0)

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

2025-12-01 23:11:14 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen en_US.UTF-8 && rm -rf /var/lib/apt/lists/* # buildkit

2025-12-01 23:11:14 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.9+10_openj9-0.56.0

2025-12-01 23:11:16 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='ac8c6c5aa3c345e14e82966972040b479d672c12e5cd0eaa52d8b38e6bdea40c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_aarch64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; amd64|x86_64) ESUM='6b3022f3d286b2fde9a964028da637a5ad9a93b1028741dcb72aa3bca49c83d2'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_x64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='876af8243616745796762539816cdb37c194e4b5942398277d6ccd35e96e3dcc'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_ppc64le_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; s390x) ESUM='e7828369bf76eb25426b807c039974f067888e1f67e9e461274407675946738e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_s390x_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p /opt/java/openjdk; cd /opt/java/openjdk; tar -xf /tmp/openjdk.tar.gz --strip-components=1; rm -rf /tmp/openjdk.tar.gz; # buildkit

2025-12-01 23:11:16 UTC (buildkit.dockerfile.v0)

ENV JAVA_HOME=/opt/java/openjdk PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2025-12-01 23:11:16 UTC (buildkit.dockerfile.v0)

ENV JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

2025-12-01 23:11:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; unset OPENJ9_JAVA_OPTIONS; SCC_SIZE="50m"; DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; INSTALL_PATH_TOMCAT=/opt/tomcat-home; TOMCAT_CHECKSUM="fc55589f28bf6659928167461c741649b6005b64285dd81df05bb5ee40f4c6de59b8ee3af84ff756ae1513fc47f5f73070e29313b555e27f096f25881c69841d"; TOMCAT_VERSION="9.0.112"; TOMCAT_FILENAME="apache-tomcat-${TOMCAT_VERSION}.tar.gz"; SUCCESS=; mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; for baseUrl in https://dlcdn.apache.org/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin ; do if curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${baseUrl}/${TOMCAT_FILENAME}" && [ -s "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz ]; then SUCCESS=1; break; fi; done; [ -n "$SUCCESS" ]; echo "${TOMCAT_CHECKSUM} ${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; rm -rf "${DOWNLOAD_PATH_TOMCAT}"; java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 15; FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; SCC_SIZE="${SCC_SIZE}m"; java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; unset OPENJ9_JAVA_OPTIONS; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 5; FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); echo "SCC layer is $FULL% full."; rm -rf "${INSTALL_PATH_TOMCAT}"; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2025-12-15 14:36:13 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2025-12-15 14:36:13 UTC (buildkit.dockerfile.v0)

COPY application/spring-boot-loader/ ./ # buildkit

2025-12-15 14:36:13 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2025-12-15 14:36:14 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2025-12-15 14:36:14 UTC (buildkit.dockerfile.v0)

ENV JVM_OPTS=-Xmx256m -Xms256m HALO_WORK_DIR=/root/.halo2 SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/ TZ=Asia/Shanghai

2025-12-15 14:36:14 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit

2025-12-15 14:36:14 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2025-12-15 14:36:14 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]

Details
Created

2025-12-15 14:37:10 UTC

Size

244 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2025-12-15T14:35:09.556Z
  • org.opencontainers.image.description
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2d333f40c31a41d65a79a3e7d8d8e2bbe885e7ef
  • org.opencontainers.image.source
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.title
    halo-pro
  • org.opencontainers.image.url
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.version
    2.22.0-alpha.2

Environment
HALO_WORK_DIR

/root/.halo2

JAVA_HOME

/opt/java/openjdk

JAVA_TOOL_OPTIONS

-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

JAVA_VERSION

jdk-21.0.9+10_openj9-0.56.0

JVM_OPTS

-Xmx256m -Xms256m

LANG

en_US.UTF-8

LANGUAGE

en_US:en

LC_ALL

en_US.UTF-8

PATH

/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SPRING_CONFIG_LOCATION

optional:classpath:/;optional:file:/root/.halo2/

TZ

Asia/Shanghai


Layers

[#000] sha256:97dd3f0ce510a30a2868ff104e9ff286ffc0ef01284aebe383ea81e85e26a415 - 11.27% (27.5 MB)

[#001] sha256:33b9f34b141ab0620f5c570d2bfb1624e85bd2d84ece6d1aad637c846128de6b - 5.01% (12.2 MB)

[#002] sha256:5df7a3505efa4e34d8de32b86bb3d6b83f1b13f0ffd43724349caa365d86a2f9 - 22.69% (55.4 MB)

[#003] sha256:0ea5eae21631e5265e8b6ce92bd0281ecefb4fb2757c5d2c95c9a91124513693 - 1.95% (4.76 MB)

[#004] sha256:7706f90be981306564b595d866c985ecd1c3019d4c1744c87b35b00f6af81dfc - 0.0% (101 Bytes)

[#005] sha256:c28d26a299e7f76460e7a615f626f3d05bfb9c73711c66f7c299b1b97d0576fb - 51.43% (126 MB)

[#006] sha256:467ffdb239650d91810d284ef20be6de5ce606a40079c92ecaa9c951eb7371da - 0.05% (130 KB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:a92f68f11145f62d0a4772d03f685417de46af1c8df8a9e64453e41448d6bf04 - 7.59% (18.5 MB)

[#009] sha256:db16077daffa8455516dddd759c7853823ba0c823a80fdaebb982bc52fd8cab8 - 0.0% (191 Bytes)


History
2025-10-16 19:26:52 UTC

/bin/sh -c #(nop) ARG RELEASE

2025-10-16 19:26:52 UTC

/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH

2025-10-16 19:26:52 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu

2025-10-16 19:26:52 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04

2025-10-16 19:26:58 UTC

/bin/sh -c #(nop) ADD file:44fdb45bd3a8d9bd9c66b716aa0bb6ee11b6fbcceb59ee0eb54165785a35dfcb in /

2025-10-16 19:26:58 UTC

/bin/sh -c #(nop) CMD ["/bin/bash"]

2025-12-01 21:54:21 UTC (buildkit.dockerfile.v0)

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

2025-12-01 21:54:21 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen en_US.UTF-8 && rm -rf /var/lib/apt/lists/* # buildkit

2025-12-01 21:54:21 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.9+10_openj9-0.56.0

2025-12-01 21:54:25 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='ac8c6c5aa3c345e14e82966972040b479d672c12e5cd0eaa52d8b38e6bdea40c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_aarch64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; amd64|x86_64) ESUM='6b3022f3d286b2fde9a964028da637a5ad9a93b1028741dcb72aa3bca49c83d2'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_x64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='876af8243616745796762539816cdb37c194e4b5942398277d6ccd35e96e3dcc'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_ppc64le_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; s390x) ESUM='e7828369bf76eb25426b807c039974f067888e1f67e9e461274407675946738e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_s390x_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p /opt/java/openjdk; cd /opt/java/openjdk; tar -xf /tmp/openjdk.tar.gz --strip-components=1; rm -rf /tmp/openjdk.tar.gz; # buildkit

2025-12-01 21:54:25 UTC (buildkit.dockerfile.v0)

ENV JAVA_HOME=/opt/java/openjdk PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2025-12-01 21:54:25 UTC (buildkit.dockerfile.v0)

ENV JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

2025-12-01 21:54:57 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; unset OPENJ9_JAVA_OPTIONS; SCC_SIZE="50m"; DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; INSTALL_PATH_TOMCAT=/opt/tomcat-home; TOMCAT_CHECKSUM="fc55589f28bf6659928167461c741649b6005b64285dd81df05bb5ee40f4c6de59b8ee3af84ff756ae1513fc47f5f73070e29313b555e27f096f25881c69841d"; TOMCAT_VERSION="9.0.112"; TOMCAT_FILENAME="apache-tomcat-${TOMCAT_VERSION}.tar.gz"; SUCCESS=; mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; for baseUrl in https://dlcdn.apache.org/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin ; do if curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${baseUrl}/${TOMCAT_FILENAME}" && [ -s "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz ]; then SUCCESS=1; break; fi; done; [ -n "$SUCCESS" ]; echo "${TOMCAT_CHECKSUM} ${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; rm -rf "${DOWNLOAD_PATH_TOMCAT}"; java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 15; FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; SCC_SIZE="${SCC_SIZE}m"; java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; unset OPENJ9_JAVA_OPTIONS; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 5; FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); echo "SCC layer is $FULL% full."; rm -rf "${INSTALL_PATH_TOMCAT}"; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/spring-boot-loader/ ./ # buildkit

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

ENV JVM_OPTS=-Xmx256m -Xms256m HALO_WORK_DIR=/root/.halo2 SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/ TZ=Asia/Shanghai

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]

Details
Created

2025-12-15 14:36:58 UTC

Size

253 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2025-12-15T14:35:09.556Z
  • org.opencontainers.image.description
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2d333f40c31a41d65a79a3e7d8d8e2bbe885e7ef
  • org.opencontainers.image.source
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.title
    halo-pro
  • org.opencontainers.image.url
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.version
    2.22.0-alpha.2

Environment
HALO_WORK_DIR

/root/.halo2

JAVA_HOME

/opt/java/openjdk

JAVA_TOOL_OPTIONS

-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

JAVA_VERSION

jdk-21.0.9+10_openj9-0.56.0

JVM_OPTS

-Xmx256m -Xms256m

LANG

en_US.UTF-8

LANGUAGE

en_US:en

LC_ALL

en_US.UTF-8

PATH

/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SPRING_CONFIG_LOCATION

optional:classpath:/;optional:file:/root/.halo2/

TZ

Asia/Shanghai


Layers

[#000] sha256:d63f81c8011c079a4b917f15cc5c547103c6dee1be455ff6ecd1f2c1f5af0055 - 12.95% (32.7 MB)

[#001] sha256:deeed061b7b811d5f2dacc798a5fa9f9027e6aadfe4d5cd0c08707f2ee04253a - 5.21% (13.2 MB)

[#002] sha256:1eae94ecd0286c7cea2aea440a0163fd4edff3a7b0d0fa86fbec9e096e140e07 - 23.29% (58.9 MB)

[#003] sha256:dffe2b0cba418248556f555d20274df21065c6a0ed2f084f71e4a43c465c25fa - 1.5% (3.78 MB)

[#004] sha256:7706f90be981306564b595d866c985ecd1c3019d4c1744c87b35b00f6af81dfc - 0.0% (101 Bytes)

[#005] sha256:4f9e9c32d0d64d5c095125f1b912ca7c3191afdbfbabfa5c84bc398554b17bae - 49.68% (126 MB)

[#006] sha256:e09c92b23b469e039e0adff5d1149dc4134752e1fbe788a9010fa4114c1e277c - 0.05% (130 KB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:87c6b0639a2e27a756612f9ecf49a7e3b30fe0b14c9133af9b7f288e2b8cdc6f - 7.33% (18.5 MB)

[#009] sha256:0e27a0574aeeffa3d1fafd8e8310c5c1a240c4651f47a614037f8ffe7230bfa6 - 0.0% (193 Bytes)


History
2025-10-16 19:25:20 UTC

/bin/sh -c #(nop) ARG RELEASE

2025-10-16 19:25:20 UTC

/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH

2025-10-16 19:25:20 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu

2025-10-16 19:25:20 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04

2025-10-16 19:25:23 UTC

/bin/sh -c #(nop) ADD file:33eacf94519a8a8195b8465116ad15d91df7bc9e43d9609157043b3b8b8f7588 in /

2025-10-16 19:25:24 UTC

/bin/sh -c #(nop) CMD ["/bin/bash"]

2025-12-01 21:53:21 UTC (buildkit.dockerfile.v0)

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

2025-12-01 21:53:21 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen en_US.UTF-8 && rm -rf /var/lib/apt/lists/* # buildkit

2025-12-01 21:53:21 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.9+10_openj9-0.56.0

2025-12-01 22:07:32 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='ac8c6c5aa3c345e14e82966972040b479d672c12e5cd0eaa52d8b38e6bdea40c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_aarch64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; amd64|x86_64) ESUM='6b3022f3d286b2fde9a964028da637a5ad9a93b1028741dcb72aa3bca49c83d2'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_x64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='876af8243616745796762539816cdb37c194e4b5942398277d6ccd35e96e3dcc'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_ppc64le_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; s390x) ESUM='e7828369bf76eb25426b807c039974f067888e1f67e9e461274407675946738e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_s390x_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p /opt/java/openjdk; cd /opt/java/openjdk; tar -xf /tmp/openjdk.tar.gz --strip-components=1; rm -rf /tmp/openjdk.tar.gz; # buildkit

2025-12-01 22:07:32 UTC (buildkit.dockerfile.v0)

ENV JAVA_HOME=/opt/java/openjdk PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2025-12-01 22:07:32 UTC (buildkit.dockerfile.v0)

ENV JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

2025-12-01 22:08:05 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; unset OPENJ9_JAVA_OPTIONS; SCC_SIZE="50m"; DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; INSTALL_PATH_TOMCAT=/opt/tomcat-home; TOMCAT_CHECKSUM="fc55589f28bf6659928167461c741649b6005b64285dd81df05bb5ee40f4c6de59b8ee3af84ff756ae1513fc47f5f73070e29313b555e27f096f25881c69841d"; TOMCAT_VERSION="9.0.112"; TOMCAT_FILENAME="apache-tomcat-${TOMCAT_VERSION}.tar.gz"; SUCCESS=; mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; for baseUrl in https://dlcdn.apache.org/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin ; do if curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${baseUrl}/${TOMCAT_FILENAME}" && [ -s "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz ]; then SUCCESS=1; break; fi; done; [ -n "$SUCCESS" ]; echo "${TOMCAT_CHECKSUM} ${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; rm -rf "${DOWNLOAD_PATH_TOMCAT}"; java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 15; FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; SCC_SIZE="${SCC_SIZE}m"; java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; unset OPENJ9_JAVA_OPTIONS; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 5; FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); echo "SCC layer is $FULL% full."; rm -rf "${INSTALL_PATH_TOMCAT}"; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2025-12-15 14:36:00 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2025-12-15 14:36:57 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2025-12-15 14:36:57 UTC (buildkit.dockerfile.v0)

COPY application/spring-boot-loader/ ./ # buildkit

2025-12-15 14:36:57 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2025-12-15 14:36:58 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2025-12-15 14:36:58 UTC (buildkit.dockerfile.v0)

ENV JVM_OPTS=-Xmx256m -Xms256m HALO_WORK_DIR=/root/.halo2 SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/ TZ=Asia/Shanghai

2025-12-15 14:36:58 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit

2025-12-15 14:36:58 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2025-12-15 14:36:58 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]

Details
Created

2025-12-15 14:37:10 UTC

Size

247 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2025-12-15T14:35:09.556Z
  • org.opencontainers.image.description
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2d333f40c31a41d65a79a3e7d8d8e2bbe885e7ef
  • org.opencontainers.image.source
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.title
    halo-pro
  • org.opencontainers.image.url
    https://github.com/lxware-dev/halo-pro
  • org.opencontainers.image.version
    2.22.0-alpha.2

Environment
HALO_WORK_DIR

/root/.halo2

JAVA_HOME

/opt/java/openjdk

JAVA_TOOL_OPTIONS

-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

JAVA_VERSION

jdk-21.0.9+10_openj9-0.56.0

JVM_OPTS

-Xmx256m -Xms256m

LANG

en_US.UTF-8

LANGUAGE

en_US:en

LC_ALL

en_US.UTF-8

PATH

/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

SPRING_CONFIG_LOCATION

optional:classpath:/;optional:file:/root/.halo2/

TZ

Asia/Shanghai


Layers

[#000] sha256:7d5b0205a5ff16c2b58f20a113b5eb9a80393a644df077beab5d90635153dc66 - 11.57% (28.5 MB)

[#001] sha256:1dd317c4724c78a49e25aa011e262dc6ebca1354c70f200695dfeb016f675c0e - 5.08% (12.5 MB)

[#002] sha256:988333dc814a432dd30256153995b23f85dac921499c8d5a2267f2dc8ca4c258 - 22.77% (56.1 MB)

[#003] sha256:2a05752e0ab5a9ee87310381d400ee5c88cf162235a06d91107ac0b77992e902 - 2.09% (5.16 MB)

[#004] sha256:00df8361842af49f714e6d14fc859dda74b6c9ee76436001c0477f9651cd42ef - 0.0% (101 Bytes)

[#005] sha256:a54ee09417d20f52f1e024abd1383b50ce5f1e1764870c7deefa8cc9581bc9d0 - 50.93% (126 MB)

[#006] sha256:7a09a3e69b88f7b5484e545744c0c877004a43561f7543d73f5125478b9b4e6f - 0.05% (130 KB)

[#007] sha256:4f4fb700ef54461cfa02571ae0db9a0dc1e0cdb5577484a6d75e68dc38e8acc1 - 0.0% (32 Bytes)

[#008] sha256:b9ecfb68436e358bccd08cbc6eea27b7b522268df821f2df1f3e78847dba6404 - 7.51% (18.5 MB)

[#009] sha256:db16077daffa8455516dddd759c7853823ba0c823a80fdaebb982bc52fd8cab8 - 0.0% (191 Bytes)


History
2025-10-16 19:25:14 UTC

/bin/sh -c #(nop) ARG RELEASE

2025-10-16 19:25:14 UTC

/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH

2025-10-16 19:25:14 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu

2025-10-16 19:25:14 UTC

/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04

2025-10-16 19:25:16 UTC

/bin/sh -c #(nop) ADD file:f7335d462150d31c3c91b13ccd3e927bc9a1b9c6664fa8905ccf68bbe3d86cd3 in /

2025-10-16 19:25:16 UTC

/bin/sh -c #(nop) CMD ["/bin/bash"]

2025-12-01 21:53:39 UTC (buildkit.dockerfile.v0)

ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8

2025-12-01 21:53:39 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata curl ca-certificates fontconfig locales && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && locale-gen en_US.UTF-8 && rm -rf /var/lib/apt/lists/* # buildkit

2025-12-01 21:53:39 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.9+10_openj9-0.56.0

2025-12-01 21:59:14 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='ac8c6c5aa3c345e14e82966972040b479d672c12e5cd0eaa52d8b38e6bdea40c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_aarch64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; amd64|x86_64) ESUM='6b3022f3d286b2fde9a964028da637a5ad9a93b1028741dcb72aa3bca49c83d2'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_x64_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='876af8243616745796762539816cdb37c194e4b5942398277d6ccd35e96e3dcc'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_ppc64le_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; s390x) ESUM='e7828369bf76eb25426b807c039974f067888e1f67e9e461274407675946738e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.9%2B10_openj9-0.56.0/ibm-semeru-open-jre_s390x_linux_21.0.9_10_openj9-0.56.0.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; curl -LfsSo /tmp/openjdk.tar.gz ${BINARY_URL}; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p /opt/java/openjdk; cd /opt/java/openjdk; tar -xf /tmp/openjdk.tar.gz --strip-components=1; rm -rf /tmp/openjdk.tar.gz; # buildkit

2025-12-01 21:59:14 UTC (buildkit.dockerfile.v0)

ENV JAVA_HOME=/opt/java/openjdk PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2025-12-01 21:59:14 UTC (buildkit.dockerfile.v0)

ENV JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal

2025-12-01 21:59:47 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; unset OPENJ9_JAVA_OPTIONS; SCC_SIZE="50m"; DOWNLOAD_PATH_TOMCAT=/tmp/tomcat; INSTALL_PATH_TOMCAT=/opt/tomcat-home; TOMCAT_CHECKSUM="fc55589f28bf6659928167461c741649b6005b64285dd81df05bb5ee40f4c6de59b8ee3af84ff756ae1513fc47f5f73070e29313b555e27f096f25881c69841d"; TOMCAT_VERSION="9.0.112"; TOMCAT_FILENAME="apache-tomcat-${TOMCAT_VERSION}.tar.gz"; SUCCESS=; mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; for baseUrl in https://dlcdn.apache.org/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin https://archive.apache.org/dist/tomcat/tomcat-9/v${TOMCAT_VERSION}/bin ; do if curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${baseUrl}/${TOMCAT_FILENAME}" && [ -s "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz ]; then SUCCESS=1; break; fi; done; [ -n "$SUCCESS" ]; echo "${TOMCAT_CHECKSUM} ${DOWNLOAD_PATH_TOMCAT}/tomcat.tar.gz" | sha512sum -c -; tar -xf "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz -C "${INSTALL_PATH_TOMCAT}" --strip-components=1; rm -rf "${DOWNLOAD_PATH_TOMCAT}"; java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 15; FULL=$( (java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); DST_CACHE=$(java -Xshareclasses:name=dry_run_scc,cacheDir=/opt/java/.scc,destroy 2>&1 || true); SCC_SIZE=$(echo $SCC_SIZE | sed 's/.$//'); SCC_SIZE=$(awk "BEGIN {print int($SCC_SIZE * $FULL / 100.0)}"); [ "${SCC_SIZE}" -eq 0 ] && SCC_SIZE=1; SCC_SIZE="${SCC_SIZE}m"; java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal,createLayer -Xscmx$SCC_SIZE -version; unset OPENJ9_JAVA_OPTIONS; export OPENJ9_JAVA_OPTIONS="-XX:+IProfileDuringStartupPhase -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,bootClassesOnly,nonFatal"; "${INSTALL_PATH_TOMCAT}"/bin/startup.sh; sleep 5; "${INSTALL_PATH_TOMCAT}"/bin/shutdown.sh -force; sleep 5; FULL=$( (java -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,printallStats 2>&1 || true) | awk '/^Cache is [0-9.]*% .*full/ {print substr($3, 1, length($3)-1)}'); echo "SCC layer is $FULL% full."; rm -rf "${INSTALL_PATH_TOMCAT}"; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2025-12-15 14:36:04 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2025-12-15 14:36:04 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/spring-boot-loader/ ./ # buildkit

2025-12-15 14:37:09 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

ENV JVM_OPTS=-Xmx256m -Xms256m HALO_WORK_DIR=/root/.halo2 SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/ TZ=Asia/Shanghai

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2025-12-15 14:37:10 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]

Danger Zone
Delete Tag

Please be careful as this will not just delete the reference but also the actual content!

For example when you have latest and v1.2.3 both pointing to the same image
the deletion of latest will also permanently remove v1.2.3.

Delete