Skip to content

Commit f72be00

Browse files
author
Yuriy Bezsonov
committed
add missing dockerfiles
1 parent 1b64e25 commit f72be00

3 files changed

Lines changed: 102 additions & 10 deletions

File tree

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Dockerfile_08_CDS - Class Data Sharing for faster startup
2+
# Uses Spring Boot's built-in CDS support (Spring Boot 3.3+)
3+
# No source code changes required
4+
5+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
6+
7+
COPY ./pom.xml ./pom.xml
8+
COPY src ./src/
9+
10+
RUN mvn clean package -DskipTests && mv target/store-spring-1.0.0-exec.jar store-spring.jar
11+
RUN rm -rf ~/.m2/repository
12+
13+
# Training run to generate CDS archive
14+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023 AS trainer
15+
16+
COPY --from=builder store-spring.jar store-spring.jar
17+
18+
# Run training to extract CDS archive
19+
# Spring Boot exits after ApplicationContext refresh with spring.context.exit=onRefresh
20+
RUN java -Dspring.context.exit=onRefresh \
21+
-XX:ArchiveClassesAtExit=/app.jsa \
22+
-Dspring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration \
23+
-jar store-spring.jar || true
24+
25+
# Runtime image
26+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
27+
28+
RUN yum install -y shadow-utils
29+
30+
COPY --from=builder store-spring.jar store-spring.jar
31+
COPY --from=trainer /app.jsa /app.jsa
32+
33+
RUN groupadd --system spring -g 1000
34+
RUN adduser spring -u 1000 -g 1000
35+
36+
USER 1000:1000
37+
38+
EXPOSE 8080
39+
40+
# Use CDS archive for faster startup
41+
ENTRYPOINT ["java", "-XX:SharedArchiveFile=/app.jsa", "-jar", "-Dserver.port=8080", "/store-spring.jar"]
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Dockerfile_09_CRaC - Coordinated Restore at Checkpoint
2+
# Uses Azul Zulu with CRaC + Warp engine for ~100ms startup
3+
# Requires UnicornPublisher.crac modification for AWS SDK
4+
5+
FROM azul/zulu-openjdk:25-jdk-crac-latest AS builder
6+
7+
RUN apt-get -qq update && apt-get -qq install -y curl maven
8+
9+
ARG SPRING_DATASOURCE_URL
10+
ENV SPRING_DATASOURCE_URL=$SPRING_DATASOURCE_URL
11+
ARG SPRING_DATASOURCE_PASSWORD
12+
ENV SPRING_DATASOURCE_PASSWORD=$SPRING_DATASOURCE_PASSWORD
13+
14+
COPY ./pom.xml ./pom.xml
15+
COPY src ./src/
16+
17+
# Build the application
18+
RUN mvn clean package -DskipTests -ntp && mv target/store-spring-1.0.0-exec.jar store-spring.jar
19+
20+
# Run the application and take a checkpoint using Warp engine
21+
# -Dspring.context.checkpoint=onRefresh: checkpoint after Spring context refresh
22+
# -XX:CRaCEngine=warp: use Warp engine (no CRIU, no extra privileges needed)
23+
# -XX:CPUFeatures=generic: portable checkpoint across different CPU types
24+
RUN <<END_OF_SCRIPT
25+
#!/bin/bash
26+
java -Dspring.context.checkpoint=onRefresh \
27+
-Djdk.crac.collect-fd-stacktraces=true \
28+
-XX:CRaCEngine=warp \
29+
-XX:CPUFeatures=generic \
30+
-XX:CRaCCheckpointTo=/opt/crac-files \
31+
-jar /store-spring.jar & PID=$!
32+
wait $PID || true
33+
END_OF_SCRIPT
34+
35+
FROM azul/zulu-openjdk:25-jdk-crac-latest AS runner
36+
37+
RUN apt-get -qq update && apt-get -qq install -y adduser \
38+
&& addgroup --system --gid 1000 spring \
39+
&& adduser --system --disabled-password --gecos "" --uid 1000 --gid 1000 spring
40+
41+
COPY --from=builder --chown=1000:1000 /opt/crac-files /opt/crac-files
42+
COPY --from=builder --chown=1000:1000 /store-spring.jar /store-spring.jar
43+
44+
USER 1000:1000
45+
EXPOSE 8080
46+
47+
# Restore the application from the checkpoint
48+
CMD ["java", "-XX:CRaCEngine=warp", "-XX:CRaCRestoreFrom=/opt/crac-files"]
Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
1+
# Dockerfile_10_async_profiler - Continuous profiling with async-profiler
2+
# Used with S3 Mountpoint CSI driver for storing profiling results
3+
# Supports both ARM64 (Graviton) and x64 architectures
4+
15
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
26

7+
ARG TARGETARCH
8+
39
RUN yum install -y wget tar gzip
410
RUN cd /tmp && \
5-
wget https://github.com/async-profiler/async-profiler/releases/download/v3.0/async-profiler-3.0-linux-x64.tar.gz && \
11+
ARCH=$([ "$TARGETARCH" = "arm64" ] && echo "aarch64" || echo "x64") && \
12+
wget https://github.com/async-profiler/async-profiler/releases/download/v4.2.1/async-profiler-4.2.1-linux-${ARCH}.tar.gz && \
613
mkdir /async-profiler && \
7-
tar -xvzf ./async-profiler-3.0-linux-x64.tar.gz -C /async-profiler --strip-components=1
14+
tar -xvzf ./async-profiler-4.2.1-linux-${ARCH}.tar.gz -C /async-profiler --strip-components=1
815

916
COPY ./pom.xml ./pom.xml
1017
COPY src ./src/
1118

12-
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar store-spring.jar
13-
RUN rm -rf ~/.m2/repository
19+
RUN mvn clean package -DskipTests -ntp && mv target/store-spring-1.0.0-exec.jar store-spring.jar
1420

15-
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
16-
RUN yum install -y shadow-utils procps tar
21+
FROM public.ecr.aws/docker/library/amazoncorretto:25-alpine AS runtime
22+
23+
RUN addgroup -g 1000 -S spring && adduser -D -u 1000 -G spring spring
1724

1825
COPY --from=builder /async-profiler/ /async-profiler/
1926
COPY --from=builder store-spring.jar store-spring.jar
2027

21-
RUN groupadd --system spring -g 1000
22-
RUN adduser spring -u 1000 -g 1000
23-
ENV SPRING_THREADS_VIRTUAL_ENABLED=false
2428
USER 1000:1000
25-
2629
EXPOSE 8080
2730
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]

0 commit comments

Comments
 (0)