镜像构建历史
# 2025-05-15 14:21:32 0.00B 配置容器启动时运行的命令
ENTRYPOINT ["sh" "-c" "java -Dreactor.schedulers.defaultBoundedElasticOnVirtualThreads=true ${JVM_OPTS} org.springframework.boot.loader.launch.JarLauncher ${0} ${@}"]
# 2025-05-15 14:21:32 0.00B 声明容器运行时监听的端口
EXPOSE map[8090/tcp:{}]
# 2025-05-15 14:21:32 47.00B 执行命令并创建新的镜像层
RUN /bin/sh -c ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # buildkit
# 2025-05-15 14:21:32 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-05-15 14:21:32 28.42MB 复制新文件或目录到容器中
COPY application/application/ ./ # buildkit
# 2025-05-15 14:21:32 0.00B 复制新文件或目录到容器中
COPY application/snapshot-dependencies/ ./ # buildkit
# 2025-05-15 14:21:32 400.67KB 复制新文件或目录到容器中
COPY application/spring-boot-loader/ ./ # buildkit
# 2025-05-15 14:21:32 108.41MB 复制新文件或目录到容器中
COPY application/dependencies/ ./ # buildkit
# 2025-05-15 14:21:27 0.00B 设置工作目录为/application
WORKDIR /application
# 2025-05-15 14:21:27 0.00B 添加元数据标签
LABEL maintainer=johnniang <johnniang@foxmail.com>
# 2025-05-08 01:42:21 16.78MB 执行命令并创建新的镜像层
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="cbe407f17c813d9f83cab459e603df171f2e5782c3a0cdb4cfa00b0391a89cedf865c6d8972fc7e12210c69a8467ede5939f35bb0f3b41fa173b9ee83199768a"; TOMCAT_DWNLD_URL="https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.102/bin/apache-tomcat-9.0.102.tar.gz"; mkdir -p "${DOWNLOAD_PATH_TOMCAT}" "${INSTALL_PATH_TOMCAT}"; curl -LfsSo "${DOWNLOAD_PATH_TOMCAT}"/tomcat.tar.gz "${TOMCAT_DWNLD_URL}"; 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-05-08 01:42:21 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-05-08 01:42:21 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-05-08 01:42:21 173.95MB 执行命令并创建新的镜像层
RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in aarch64|arm64) ESUM='8a140dc3806d8e0ae23ca37cff6b4cf225eea45bc82b0749c05ad5f05b9cff36'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.7%2B6_openj9-0.51.0/ibm-semeru-open-jre_aarch64_linux_21.0.7_6_openj9-0.51.0.tar.gz'; ;; amd64|x86_64) ESUM='1c439bacc90f3a119edc3a7f313512b49b21d583a960cb318094974fe5006246'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.7%2B6_openj9-0.51.0/ibm-semeru-open-jre_x64_linux_21.0.7_6_openj9-0.51.0.tar.gz'; ;; ppc64el|ppc64le) ESUM='c3e5287710e9a30a905e82cd0bb67a114cec08fc4a03f82798e76d22a1a7137e'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.7%2B6_openj9-0.51.0/ibm-semeru-open-jre_ppc64le_linux_21.0.7_6_openj9-0.51.0.tar.gz'; ;; s390x) ESUM='8c2ba94ac14dce46c68a7d46d600bee1685862299926a5462754a9dece5607cc'; BINARY_URL='https://github.com/ibmruntimes/semeru21-binaries/releases/download/jdk-21.0.7%2B6_openj9-0.51.0/ibm-semeru-open-jre_s390x_linux_21.0.7_6_openj9-0.51.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-05-08 01:42:21 0.00B 设置环境变量 JAVA_VERSION
ENV JAVA_VERSION=jdk-21.0.7+6_openj9-0.51.0
# 2025-05-08 01:42:21 34.68MB 执行命令并创建新的镜像层
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-05-08 01:42:21 0.00B 设置环境变量 LANG LANGUAGE LC_ALL
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
# 2025-04-28 17:44:51 0.00B
/bin/sh -c #(nop) CMD ["/bin/bash"]
# 2025-04-28 17:44:50 78.10MB
/bin/sh -c #(nop) ADD file:ad85a9d7b0a74c2140bd51d9c4559cca392991e0c95f84cb139347348e5d1f9a in /
# 2025-04-28 17:44:48 0.00B
/bin/sh -c #(nop) LABEL org.opencontainers.image.version=24.04
# 2025-04-28 17:44:48 0.00B
/bin/sh -c #(nop) LABEL org.opencontainers.image.ref.name=ubuntu
# 2025-04-28 17:44:48 0.00B
/bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH
# 2025-04-28 17:44:48 0.00B
/bin/sh -c #(nop) ARG RELEASE
镜像信息
{
"Id": "sha256:65f5c3a00174eff0f590392fdf858c85bb54e21afa506b3d74a80f14aa681517",
"RepoTags": [
"halohub/halo:2.20.21",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/halohub/halo:2.20.21"
],
"RepoDigests": [
"halohub/halo@sha256:2ad7b29de627a1cc2a5e8f69e5e0804fc1d715d7286cf79e323cb2f840c65ab8",
"swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/halohub/halo@sha256:5d52949def7cd68c764e81bda500f94d69459319191ac2e40566e53327e903ea"
],
"Parent": "",
"Comment": "buildkit.dockerfile.v0",
"Created": "2025-05-15T06:21:32.818922481Z",
"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.7+6_openj9-0.51.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-05-15T06:21:01.722Z",
"org.opencontainers.image.description": "强大易用的开源建站工具。",
"org.opencontainers.image.licenses": "GPL-3.0",
"org.opencontainers.image.ref.name": "ubuntu",
"org.opencontainers.image.revision": "2ca731f10a49605e22e75bdf1ba52fcb0d18a3a3",
"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": 440749165,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d04983310f6260bed0e9d2306adc3ba67562e62e26c7012585c0b09485156dc0/diff:/var/lib/docker/overlay2/f3258aea5689b3df4171aa01b3214ebe252d9f5600b4562fa54d4d2e518c1014/diff:/var/lib/docker/overlay2/c0429c69967c46ba43727c991809babf2258a8f2f27c597b640fe96f965ba336/diff:/var/lib/docker/overlay2/0dc3b94d341f322a0d668d295cf1af7120e6bd9ab6c898c5ee8d4d4f2614cbb4/diff:/var/lib/docker/overlay2/a151c7e750e280513a4af3f1d2b6cf637d1145d321186f39cb3a73c34fcf7c48/diff:/var/lib/docker/overlay2/5a121e2c0aeb29df6755c4bbebd6a59069e35ef890f5f53bc8c925c9858e7cf5/diff:/var/lib/docker/overlay2/3174385d59fde4ce03a64122d0b27b4b1566e99fbb6da8a0eec1fc00c174170d/diff:/var/lib/docker/overlay2/de835df48b6d3775e5fe88a3e08f645134c247a37362e7a142a9bc94e4745534/diff:/var/lib/docker/overlay2/804f0900c22a22c0ab47f8a0a361f520535ca58c85e6793865a1afff531414a9/diff",
"MergedDir": "/var/lib/docker/overlay2/2b5be54d8e639fc5b8cdc95dc1551d3069421c53833038d536bcd3eb48a21cd4/merged",
"UpperDir": "/var/lib/docker/overlay2/2b5be54d8e639fc5b8cdc95dc1551d3069421c53833038d536bcd3eb48a21cd4/diff",
"WorkDir": "/var/lib/docker/overlay2/2b5be54d8e639fc5b8cdc95dc1551d3069421c53833038d536bcd3eb48a21cd4/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:8901a649dd5a9284fa6206a08f3ba3b5a12fddbfd2f82c880e68cdb699d98bfb",
"sha256:d97924f82f8e3c7d775be1177c236befc679be61354d4cf44ac302256b338a7d",
"sha256:a6a81ebad47fc63096bb130c73a1b2446dc08119828f95b2bd1421e464deb04c",
"sha256:0a6fe545f1b25e461427f5f900ca9af65069e9af244368c6f079e4ca837b47b2",
"sha256:f5b67fb8ca3e55ebd91d51e8d0c47024dc75f73accee4875b3746ee15c567cb4",
"sha256:87838760903ff507dc7678106831d8453f01f4e7cb8b7d3194baaf568e571c89",
"sha256:8ccbcdefbe4f09ea284cb7d86ff52487b9a280d7c9ae4b7cd015828ed11c95d0",
"sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef",
"sha256:70058a78bc6a6c8fa1f49a4d3ecb2b224e368b7e50b0ec7cd0c1f35c8dcfa0af",
"sha256:86a6ed9f3e75f222af664b0623b05b4eb843f560d15c2821444501952d0ecb55"
]
},
"Metadata": {
"LastTagTime": "2025-05-27T15:08:54.139652882+08:00"
}
}