Companion code for "Dockerizing Spring Boot 4: Layered Jars, Buildpacks, Distroless and Image Size Benchmarks". Fat jar on JDK and JRE, layered jar on Debian, Alpine and distroless, jlink, the JDK 25 AOT cache, Paketo buildpacks and Jib, each measured for size on disk and pushed, rebuild delta, startup, user and shell. Also PID 1 and signal handling, the jdeps module gap, AOT cache mismatches and buildpacks memory calculation. Transcripts in docs/output/, regenerated by scripts/run-all.sh. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01C3TETMrqVUWeFkNtz3Jbo3
16 lines
831 B
Docker
16 lines
831 B
Docker
# 7. Layered plus a JDK 25 AOT cache (JEP 483/514/515), built by a training run at image build time.
|
|
# Faster start - and one more large layer that changes on every code change (docs/06-aot-cache.md).
|
|
FROM eclipse-temurin:25-jre AS builder
|
|
WORKDIR /builder
|
|
COPY target/app.jar application.jar
|
|
RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted
|
|
|
|
FROM eclipse-temurin:25-jre
|
|
WORKDIR /application
|
|
COPY --from=builder /builder/extracted/dependencies/ ./
|
|
COPY --from=builder /builder/extracted/spring-boot-loader/ ./
|
|
COPY --from=builder /builder/extracted/snapshot-dependencies/ ./
|
|
COPY --from=builder /builder/extracted/application/ ./
|
|
RUN java -XX:AOTCacheOutput=app.aot -Dspring.context.exit=onRefresh -jar application.jar
|
|
ENTRYPOINT ["java", "-XX:AOTCache=app.aot", "-jar", "application.jar"]
|