Namespace
halohub
Image / Tag
halo:sha-2e8f9e8
Content Digest
sha256:ebbfc44e6ce0cda4ab2c3cf2c76acc4f9911e380971ba91706695e848d55546f
Details
Created

2026-03-30 14:00:44 UTC

Size

208 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2026-03-30T14:00:02.327Z
  • org.opencontainers.image.description
    Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2e8f9e8c3ba1c26eb9e225ceb47b91a37390af59
  • org.opencontainers.image.source
    https://github.com/halo-dev/halo
  • org.opencontainers.image.title
    halo
  • org.opencontainers.image.url
    https://github.com/halo-dev/halo
  • org.opencontainers.image.version
    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.10+7.1_openj9-0.57.0

JVM_OPTS

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:817807f3c64e0b90b66edc7d90297f121cad2a7c2a3ee05a731557762f91e6c7 - 13.62% (28.4 MB)

[#001] sha256:059f6885c3a59396e58185af50c67086e7395194e4bdf3f9c1a6ec6d7b1140d7 - 5.87% (12.2 MB)

[#002] sha256:f415eec39a6d8fb01b186782f55cbbaeffbee074c08fa1afca135789b50f1ef2 - 27.53% (57.3 MB)

[#003] sha256:a5555716f561ae0bac6deb4f3879e0eed463cb50935a0a9bbadd9e0bf7d36cc6 - 2.36% (4.91 MB)

[#004] sha256:4e30f385f94b638750db9c097f3c493786f4233563982c7b3677c67cd34bdbf1 - 0.0% (101 Bytes)

[#005] sha256:c50c9eb62026c90471d6aec004829916294ee9e722454641bf8f951c5cadd1bc - 43.36% (90.3 MB)

[#006] sha256:0182575020fb002557b8885a3cb779a08334d3c3538aff5cf6b5494dde80b4ed - 0.06% (129 KB)

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

[#008] sha256:4a7e8eb9ef3a87e92596b9983f8c9a0fe4fcbb250d78b994e641c39f580eabcb - 7.2% (15 MB)

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


History
2026-02-23 17:17:53 UTC

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

2026-02-23 17:17:53 UTC

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

2026-02-23 17:17:53 UTC

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

2026-02-23 17:17:53 UTC

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

2026-02-23 17:17:55 UTC

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

2026-02-23 17:17:56 UTC

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

2026-03-17 01:33:44 UTC (buildkit.dockerfile.v0)

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

2026-03-17 01:33:44 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

2026-03-17 01:33:44 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.10+7.1_openj9-0.57.0

2026-03-17 01:36:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='9eb5fbd1522ada3ab67d2de9c29745936e469cc85f5665eb471a8046ef26fdd7'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_aarch64_linux_21.0.10.1.tar.gz'; ;; amd64|x86_64) ESUM='f3828f281ab2f86936b199148de3903d6eec8d9466945abcf41160624d93b85e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_x64_linux_21.0.10.1.tar.gz'; ;; ppc64el|ppc64le) ESUM='d8b799716867d8040e0749e7f346edc443b454089d550f3c7ccc7cd885aceaaa'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_ppc64le_linux_21.0.10.1.tar.gz'; ;; s390x) ESUM='8dc7d0b814a46250ca1036d3380caf35ce2d6c546c40e54a4c1a367e217a395c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_s390x_linux_21.0.10.1.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

2026-03-17 01:36:49 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

2026-03-17 01:36:49 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

2026-03-17 01:37:52 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; export CATALINA_PID=/opt/tomcat-home/tomcat.pid; TOMCAT_CHECKSUM="8e6fa92883c161523269560a7dc9e8d58fd1199b29c630f681aa3ec2975b59d94674d2881331076b55f5ee0439748931d87c099c79d7bcea909303739e612e4b"; TOMCAT_VERSION="9.0.115"; 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 20; "${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 20; "${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}"; unset CATALINA_PID; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2026-03-30 14:00:37 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2026-03-30 14:00:37 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2026-03-30 14:00:43 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2026-03-30 14:00:43 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:00:43 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2026-03-30 14:00:44 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2026-03-30 14:00:44 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:00:44 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:00:44 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2026-03-30 14:00:44 UTC (buildkit.dockerfile.v0)

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

Details
Created

2026-03-30 14:01:16 UTC

Size

206 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2026-03-30T14:00:02.327Z
  • org.opencontainers.image.description
    Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2e8f9e8c3ba1c26eb9e225ceb47b91a37390af59
  • org.opencontainers.image.source
    https://github.com/halo-dev/halo
  • org.opencontainers.image.title
    halo
  • org.opencontainers.image.url
    https://github.com/halo-dev/halo
  • org.opencontainers.image.version
    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.10+7.1_openj9-0.57.0

JVM_OPTS

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:86790fc5660dcd86928b849ae0826aba701bf9e005e92c8f9e06c917e82c87f7 - 13.4% (27.5 MB)

[#001] sha256:588cb62c5189e18cdce06a3f360a75408eee4e1d2dc47cddeb2819554e920573 - 5.96% (12.2 MB)

[#002] sha256:79598b54e79d33f4431f69f21cc527a6d016b9dec2b47c146ede9a04505f4cb6 - 27.07% (55.6 MB)

[#003] sha256:16fbc968ba2b8ce4772ab54ae89a770fb712cc92596f955ac07de115940e2842 - 2.32% (4.76 MB)

[#004] sha256:1f65a23e052bdbda002d53cc4f1c0fd59a3bd318aeecd46204c0d3803eceb175 - 0.0% (101 Bytes)

[#005] sha256:784a64cb3bffe8dee80a76f6937e6570621b55e2167a19636b54a6840f828ff4 - 43.91% (90.3 MB)

[#006] sha256:d8f45ae00ba17b68dec43920ebef2457f0baa4a747a22286e2442ab94c22fa5c - 0.06% (129 KB)

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

[#008] sha256:8fbb0679d89672de8537026359eee30b0aca1ccd1fbb69f80ddd97a881646c11 - 7.29% (15 MB)

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


History
2026-02-23 17:19:30 UTC

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

2026-02-23 17:19:30 UTC

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

2026-02-23 17:19:30 UTC

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

2026-02-23 17:19:30 UTC

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

2026-02-23 17:19:32 UTC

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

2026-02-23 17:19:33 UTC

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

2026-03-17 01:35:29 UTC (buildkit.dockerfile.v0)

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

2026-03-17 01:35:29 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

2026-03-17 01:35:29 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.10+7.1_openj9-0.57.0

2026-03-17 01:38:49 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='9eb5fbd1522ada3ab67d2de9c29745936e469cc85f5665eb471a8046ef26fdd7'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_aarch64_linux_21.0.10.1.tar.gz'; ;; amd64|x86_64) ESUM='f3828f281ab2f86936b199148de3903d6eec8d9466945abcf41160624d93b85e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_x64_linux_21.0.10.1.tar.gz'; ;; ppc64el|ppc64le) ESUM='d8b799716867d8040e0749e7f346edc443b454089d550f3c7ccc7cd885aceaaa'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_ppc64le_linux_21.0.10.1.tar.gz'; ;; s390x) ESUM='8dc7d0b814a46250ca1036d3380caf35ce2d6c546c40e54a4c1a367e217a395c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_s390x_linux_21.0.10.1.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

2026-03-17 01:38:49 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

2026-03-17 01:38:49 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

2026-03-17 01:39:52 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; export CATALINA_PID=/opt/tomcat-home/tomcat.pid; TOMCAT_CHECKSUM="8e6fa92883c161523269560a7dc9e8d58fd1199b29c630f681aa3ec2975b59d94674d2881331076b55f5ee0439748931d87c099c79d7bcea909303739e612e4b"; TOMCAT_VERSION="9.0.115"; 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 20; "${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 20; "${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}"; unset CATALINA_PID; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2026-03-30 14:01:00 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2026-03-30 14:01:00 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2026-03-30 14:01:16 UTC (buildkit.dockerfile.v0)

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

Details
Created

2026-03-30 14:01:12 UTC

Size

214 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2026-03-30T14:00:02.327Z
  • org.opencontainers.image.description
    Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2e8f9e8c3ba1c26eb9e225ceb47b91a37390af59
  • org.opencontainers.image.source
    https://github.com/halo-dev/halo
  • org.opencontainers.image.title
    halo
  • org.opencontainers.image.url
    https://github.com/halo-dev/halo
  • org.opencontainers.image.version
    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.10+7.1_openj9-0.57.0

JVM_OPTS

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:f826c9b754a00ada9d9335ffdf3ffd40f6925a3223caac76cc429823b8621f9e - 15.28% (32.7 MB)

[#001] sha256:36fe6dcb8fff5ef43c62b8992539a79449cf84c229ea4dd2a5c95e478fed5d02 - 6.14% (13.1 MB)

[#002] sha256:408e5ab26c79e3a99b1384654769359058db99c252a733f7fe182a95ba42156a - 27.6% (59.1 MB)

[#003] sha256:d177607b7b9a007ce10abe431a1465b9d5cc64cc208a966a9957820d371414ca - 1.79% (3.83 MB)

[#004] sha256:2dc030579ea39a104f60b543251260a63aa16db6f67ecdcba84e019026333f93 - 0.0% (101 Bytes)

[#005] sha256:6d2f7f9bb4ee6b7ac78a9c2e26a1e03dac4f46f66f85459bab3ff4dacb5b0670 - 42.14% (90.3 MB)

[#006] sha256:40cdcd666b319608cf4ca524675a8812b9b0f8b4e28524817069be064cabe654 - 0.06% (129 KB)

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

[#008] sha256:d743fb072f4ff2af6308af765b86b261ca999d19b40f66b48ec1e8bc72d4c1bb - 6.99% (15 MB)

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


History
2026-02-23 17:18:33 UTC

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

2026-02-23 17:18:33 UTC

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

2026-02-23 17:18:33 UTC

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

2026-02-23 17:18:33 UTC

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

2026-02-23 17:18:36 UTC

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

2026-02-23 17:18:37 UTC

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

2026-03-17 08:45:44 UTC (buildkit.dockerfile.v0)

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

2026-03-17 08:45:44 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

2026-03-17 08:45:44 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.10+7.1_openj9-0.57.0

2026-03-17 18:57:41 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='9eb5fbd1522ada3ab67d2de9c29745936e469cc85f5665eb471a8046ef26fdd7'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_aarch64_linux_21.0.10.1.tar.gz'; ;; amd64|x86_64) ESUM='f3828f281ab2f86936b199148de3903d6eec8d9466945abcf41160624d93b85e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_x64_linux_21.0.10.1.tar.gz'; ;; ppc64el|ppc64le) ESUM='d8b799716867d8040e0749e7f346edc443b454089d550f3c7ccc7cd885aceaaa'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_ppc64le_linux_21.0.10.1.tar.gz'; ;; s390x) ESUM='8dc7d0b814a46250ca1036d3380caf35ce2d6c546c40e54a4c1a367e217a395c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_s390x_linux_21.0.10.1.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

2026-03-17 18:57:41 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

2026-03-17 18:57:41 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

2026-03-17 18:58: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; export CATALINA_PID=/opt/tomcat-home/tomcat.pid; TOMCAT_CHECKSUM="8e6fa92883c161523269560a7dc9e8d58fd1199b29c630f681aa3ec2975b59d94674d2881331076b55f5ee0439748931d87c099c79d7bcea909303739e612e4b"; TOMCAT_VERSION="9.0.115"; 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 20; "${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 20; "${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}"; unset CATALINA_PID; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2026-03-30 14:00:37 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2026-03-30 14:00:37 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2026-03-30 14:01:11 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2026-03-30 14:01:11 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:11 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2026-03-30 14:01:12 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2026-03-30 14:01:12 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:12 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:12 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2026-03-30 14:01:12 UTC (buildkit.dockerfile.v0)

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

Details
Created

2026-03-30 14:01:15 UTC

Size

208 MB

Content Digest
Labels
  • maintainer
    johnniang <johnniang@foxmail.com>
  • org.opencontainers.image.created
    2026-03-30T14:00:02.327Z
  • org.opencontainers.image.description
    Halo 是一款强大易用的开源建站工具,从个人博客、知识库,到企业官网、在线商城,Halo 都能助您轻松实现,一站式满足您的多样化建站需求。
  • org.opencontainers.image.licenses
    GPL-3.0
  • org.opencontainers.image.ref.name
    ubuntu
  • org.opencontainers.image.revision
    2e8f9e8c3ba1c26eb9e225ceb47b91a37390af59
  • org.opencontainers.image.source
    https://github.com/halo-dev/halo
  • org.opencontainers.image.title
    halo
  • org.opencontainers.image.url
    https://github.com/halo-dev/halo
  • org.opencontainers.image.version
    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.10+7.1_openj9-0.57.0

JVM_OPTS

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:07785e1e3448bfcdd4a7c917fe2208c68391368db6b314a3bd60d0c083944c3b - 13.73% (28.5 MB)

[#001] sha256:ddd72fe89d4944163d840c3030b67bd8a8c0a04be6b4fdec7887e11919671133 - 6.02% (12.5 MB)

[#002] sha256:e9c62aaf2bfbdff9ab74c537c3b78bdefe605fb75efb21b602efc8d9d77e7683 - 27.07% (56.2 MB)

[#003] sha256:b57341057c32ee2079919abdf0cd0f041f0098109ac576a758c6f6a67f788a4e - 2.46% (5.12 MB)

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

[#005] sha256:eed2c20ad7897f7c94eb863c6d0f82262e58304adf4aca1dc23f71df3c56fb73 - 43.44% (90.3 MB)

[#006] sha256:39a306cef848b71f6f4223fa2908149f2828f9028621b90b3d425c688e286d33 - 0.06% (129 KB)

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

[#008] sha256:a180b2c5256fb5d16f622a13abf6ae5e61af295b06ace74cf0e70564ea24b115 - 7.21% (15 MB)

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


History
2026-02-23 17:19:45 UTC

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

2026-02-23 17:19:45 UTC

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

2026-02-23 17:19:45 UTC

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

2026-02-23 17:19:45 UTC

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

2026-02-23 17:19:46 UTC

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

2026-02-23 17:19:46 UTC

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

2026-03-17 02:27:22 UTC (buildkit.dockerfile.v0)

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

2026-03-17 02:27:22 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

2026-03-17 02:27:22 UTC (buildkit.dockerfile.v0)

ENV JAVA_VERSION=jdk-21.0.10+7.1_openj9-0.57.0

2026-03-17 02:31:26 UTC (buildkit.dockerfile.v0)

RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='9eb5fbd1522ada3ab67d2de9c29745936e469cc85f5665eb471a8046ef26fdd7'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_aarch64_linux_21.0.10.1.tar.gz'; ;; amd64|x86_64) ESUM='f3828f281ab2f86936b199148de3903d6eec8d9466945abcf41160624d93b85e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_x64_linux_21.0.10.1.tar.gz'; ;; ppc64el|ppc64le) ESUM='d8b799716867d8040e0749e7f346edc443b454089d550f3c7ccc7cd885aceaaa'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_ppc64le_linux_21.0.10.1.tar.gz'; ;; s390x) ESUM='8dc7d0b814a46250ca1036d3380caf35ce2d6c546c40e54a4c1a367e217a395c'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.10+7.1_openj9-0.57.0/ibm-semeru-open-jre_s390x_linux_21.0.10.1.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

2026-03-17 02:31:26 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

2026-03-17 02:31:26 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

2026-03-17 02:32:30 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; export CATALINA_PID=/opt/tomcat-home/tomcat.pid; TOMCAT_CHECKSUM="8e6fa92883c161523269560a7dc9e8d58fd1199b29c630f681aa3ec2975b59d94674d2881331076b55f5ee0439748931d87c099c79d7bcea909303739e612e4b"; TOMCAT_VERSION="9.0.115"; 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 20; "${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 20; "${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}"; unset CATALINA_PID; if [ -d "/opt/java/.scc" ]; then chmod -R 0777 /opt/java/.scc; fi; echo "SCC generation phase completed"; # buildkit

2026-03-30 14:00:31 UTC (buildkit.dockerfile.v0)

LABEL maintainer=johnniang <johnniang@foxmail.com>

2026-03-30 14:00:31 UTC (buildkit.dockerfile.v0)

WORKDIR /application

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

COPY application/dependencies/ ./ # buildkit

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

COPY application/snapshot-dependencies/ ./ # buildkit

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

COPY application/application/ ./ # buildkit

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

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

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

EXPOSE [8090/tcp]

2026-03-30 14:01:15 UTC (buildkit.dockerfile.v0)

ENTRYPOINT ["sh" "-c" "java ${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