镜像构建历史
# 2025-08-19 15:42:13 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]
# 2025-08-19 15:42:13 0.00B 声明容器运行时监听的端口
EXPOSE map[8090/tcp:{}]
# 2025-08-19 15:42:13 47.00B 执行命令并创建新的镜像层
RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit
# 2025-08-19 15:42:13 0.00B 设置环境变量 JVM_OPTS HALO_WORK_DIR SPRING_CONFIG_LOCATION TZ
ENV JVM_OPTS=-Xmx256m -Xms256m HALO_WORK_DIR=/root/.halo2 SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/ TZ=Asia/Shanghai
# 2025-08-19 15:42:13 25.47MB 复制新文件或目录到容器中
COPY application/application/ ./ # buildkit
# 2025-08-19 15:42:12 0.00B 复制新文件或目录到容器中
COPY application/snapshot-dependencies/ ./ # buildkit
# 2025-08-19 15:42:12 399.39KB 复制新文件或目录到容器中
COPY application/spring-boot-loader/ ./ # buildkit
# 2025-08-19 15:42:12 94.40MB 复制新文件或目录到容器中
COPY application/dependencies/ ./ # buildkit
# 2025-08-19 15:42:08 0.00B 设置工作目录为/application
WORKDIR /application
# 2025-08-19 15:42:08 0.00B 添加元数据标签
LABEL maintainer=johnniang <johnniang@foxmail.com>
# 2025-08-14 00:09:03 17.83MB 执行命令并创建新的镜像层
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="243474cd54d8589c97f2db964b13b36920500a298b190370a8c58306db786bb30101c33d9ca85eddd8014c5d7f53fec1685beeb4fb7f3037ffcc2f4124c6c6b7"; TOMCAT_VERSION="9.0.108"; 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-08-14 00:09:03 0.00B 设置环境变量 JAVA_TOOL_OPTIONS -Xshareclasses:name
ENV JAVA_TOOL_OPTIONS=-XX:+IgnoreUnrecognizedVMOptions -XX:+PortableSharedCache -XX:+IdleTuningGcOnIdle -Xshareclasses:name=openj9_system_scc,cacheDir=/opt/java/.scc,readonly,nonFatal
# 2025-08-14 00:09:03 0.00B 设置环境变量 JAVA_HOME PATH
ENV JAVA_HOME=/opt/java/openjdk PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# 2025-08-14 00:09:03 183.13MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='3c611717d51b2adf67e3bc676870d000ad28153b2b7c4057f6dc353be10a67e6'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.8%2B9_openj9-0.53.0/ibm-semeru-open-jre_aarch64_linux_21.0.8_9_openj9-0.53.0.tar.gz'; ;; amd64|x86_64) ESUM='90a72e4413917a89a825ee973215db7c1a50f61f46ae1609eb52945999f85ddb'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.8%2B9_openj9-0.53.0/ibm-semeru-open-jre_x64_linux_21.0.8_9_openj9-0.53.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='1f952d4b0a7c5e59286a5b7c4cd5e8b841a888c19b21fb02b8620eb0b5109366'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.8%2B9_openj9-0.53.0/ibm-semeru-open-jre_ppc64le_linux_21.0.8_9_openj9-0.53.0.tar.gz'; ;; s390x) ESUM='0204bb84c5cfd705298f482cbed9687bd2cb324306f505cee80a4b684a4fbf22'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.8%2B9_openj9-0.53.0/ibm-semeru-open-jre_s390x_linux_21.0.8_9_openj9-0.53.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-08-14 00:09:03 0.00B 设置环境变量 JAVA_VERSION
ENV JAVA_VERSION=jdk-21.0.8+9_openj9-0.53.0
# 2025-08-14 00:09:03 34.69MB 执行命令并创建新的镜像层
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-08-14 00:09:03 0.00B 设置环境变量 LANG LANGUAGE LC_ALL
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 2025-07-30 14:51:03 0.00B
/bin/sh -c #(nop) CMD ["/bin/bash"]
# 2025-07-30 14:51:02 78.12MB
/bin/sh -c #(nop) ADD file:98599296b3845cfad0ddc91f054e32ed9bcdefd76dd7b6dcf64fa3e2d648d018 in /
# 2025-07-30 14:51:00 0.00B
/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04
# 2025-07-30 14:51:00 0.00B
/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu
# 2025-07-30 14:51:00 0.00B
/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH
# 2025-07-30 14:51:00 0.00B
/bin/sh -c #(nop) ARG RELEASE
镜像信息
{
"Id": "sha256:891ff6a9ea48b7454fa9ecd0bbebab31bf5f475a0be3b696f561c786b1c449c7",
"RepoTags": [
"halohub/halo:2.21.7",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/halohub/halo:2.21.7"
],
"RepoDigests": [
"halohub/halo@sha256:af7d584f539baddccead15c2f1a7855ff6b75f48a4da2dd972b4825fbf8bd3ca",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/halohub/halo@sha256:a9cf44e6d235d5b4d1b33ca7c6403053e43a91fcfba75c13c6e2e4cf4ccff402"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-08-19T07:42:13.440253838Z",
"Container": "",
"ContainerConfig": null,
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"8090/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"LANG=en_US.UTF-8",
"LANGUAGE=en_US:en",
"LC_ALL=en_US.UTF-8",
"JAVA_VERSION=jdk-21.0.8+9_openj9-0.53.0",
"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",
"JVM_OPTS=-Xmx256m -Xms256m",
"HALO_WORK_DIR=/root/.halo2",
"SPRING_CONFIG_LOCATION=optional:classpath:/;optional:file:/root/.halo2/",
"TZ=Asia/Shanghai"
],
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "/application",
"Entrypoint": [
"sh",
"-c",
"java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"
],
"OnBuild": null,
"Labels": {
"maintainer": "johnniang \u003cjohnniang@foxmail.com\u003e",
"org.opencontainers.image.created": "2025-08-19T07:41:38.637Z",
"org.opencontainers.image.description": "强大易用的开源建站工具。",
"org.opencontainers.image.licenses": "GPL-3.0",
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.revision": "4ac80f5eb3cb5c05ff435fa5ef87c3864c4c1581",
"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"
}
},
"Architecture": "amd64",
"Os": "linux",
"Size": 434032246,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/3673a4adaf91c863af266adeb82f849533eb5c887e9a33f7ff0558647225ddfd/diff:/var/lib/docker/overlay2/a0d511d6af5c343ca5b828f2741371049790e11178f38d910a95abd102c12e98/diff:/var/lib/docker/overlay2/a61858a12e923086158bbac84be49c3f4a7950e9c049bdf63b217caae61c54b8/diff:/var/lib/docker/overlay2/bacb507407b3b384ae0717d3731b1a08c0fb81f169c895eb9bf619245b740941/diff:/var/lib/docker/overlay2/22a548a9ca37ea8aef3fa64ece72e490b6b45a2025fec9b4e1fc84bf3eaf484d/diff:/var/lib/docker/overlay2/a73ab5e9d7bd6697c2ed2dd181c1be2d48ba04281fb5aff8bb2668707e9c9e20/diff:/var/lib/docker/overlay2/6f9a2ec9dcad548464f398e03b4ccb19dd2ea4fe8f9b60efb36eb07dc4523602/diff:/var/lib/docker/overlay2/1dfec22dc0aa07afc8975799aba17086d7686ca5acb9b7813275cf505e45f29f/diff:/var/lib/docker/overlay2/2aff64731c2a8e740633e6898869290670faf32dafb0be05144103b1da913fd9/diff",
"MergedDir": "/var/lib/docker/overlay2/1153868b4f8140be5e09e8ebd6200c284b1339778b22f64e9657ba90ea8552fd/merged",
"UpperDir": "/var/lib/docker/overlay2/1153868b4f8140be5e09e8ebd6200c284b1339778b22f64e9657ba90ea8552fd/diff",
"WorkDir": "/var/lib/docker/overlay2/1153868b4f8140be5e09e8ebd6200c284b1339778b22f64e9657ba90ea8552fd/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:cd9664b1462ea111a41bdadf65ce077582cdc77e28683a4f6996dd03afcc56f5",
"sha256:dcf9c6438916053e84eea6617a1cf04240c66b1bf43340ba28e9565586802500",
"sha256:e5433ab84339aa33f57df7c7d4aacd896ce1b2d5455a992dadc7e1310ded453d",
"sha256:c5e3be8f28dd705d0e0fda206f9ebd822cd6ab309be880d54b0df550b7f54800",
"sha256:0c11b8ed5b3fe7a8c2cc8cda3226ca24f79293f3646b7372717e283885edf03b",
"sha256:06218ff1185994d8147af1bc1ccea80bd53c3a97bf2df230832ecf8ffc478e36",
"sha256:70c0059b13d6a61f4b01f629cd21a355d4fd9d6df370e4d0d26065a74df2919f",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:0a68f99d6c2283c72a99aa1c0b4bf05b1a294a311205cc3b552cf7bf5f66879d",
"sha256:3f6f247cf0dc7b33e34d1d91dc26261c8ae3930575b8bc68b78cb62a8fe3c813"
]
},
"Metadata": {
"LastTagTime": "2025-09-03T15:11:44.23178235+08:00"
}
}