Skip to content

Commit 1b64e25

Browse files
author
Yuriy Bezsonov
committed
initial dockerfiles java 25
1 parent 78e21f4 commit 1b64e25

9 files changed

Lines changed: 245 additions & 0 deletions
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
RUN yum install -y shadow-utils
4+
5+
COPY store-spring.jar store-spring.jar
6+
7+
RUN groupadd --system spring -g 1000
8+
RUN adduser spring -u 1000 -g 1000
9+
10+
USER 1000:1000
11+
12+
EXPOSE 8080
13+
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
RUN yum install -y shadow-utils
4+
5+
COPY ./pom.xml ./pom.xml
6+
COPY src ./src/
7+
8+
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar store-spring.jar
9+
RUN rm -rf ~/.m2/repository
10+
11+
RUN groupadd --system spring -g 1000
12+
RUN adduser spring -u 1000 -g 1000
13+
14+
USER 1000:1000
15+
16+
EXPOSE 8080
17+
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
COPY ./pom.xml ./pom.xml
4+
COPY src ./src/
5+
6+
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar store-spring.jar
7+
RUN rm -rf ~/.m2/repository
8+
9+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
10+
11+
RUN yum install -y shadow-utils
12+
COPY --from=builder store-spring.jar store-spring.jar
13+
RUN groupadd --system spring -g 1000
14+
RUN adduser spring -u 1000 -g 1000
15+
16+
USER 1000:1000
17+
EXPOSE 8080
18+
19+
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
COPY ./pom.xml ./pom.xml
4+
COPY src ./src/
5+
6+
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar store-spring.jar
7+
RUN rm -rf ~/.m2/repository
8+
9+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
10+
RUN yum install -y shadow-utils
11+
12+
COPY --from=builder store-spring.jar store-spring.jar
13+
14+
ADD https://github.com/aws-observability/aws-otel-java-instrumentation/releases/latest/download/aws-opentelemetry-agent.jar /opt/aws-opentelemetry-agent.jar
15+
ENV JAVA_TOOL_OPTIONS=-javaagent:/opt/aws-opentelemetry-agent.jar
16+
17+
# OpenTelemetry agent configuration
18+
ENV OTEL_TRACES_SAMPLER "always_on"
19+
ENV OTEL_PROPAGATORS "tracecontext,baggage,xray"
20+
ENV OTEL_RESOURCE_ATTRIBUTES "service.name=unicorn-store-spring"
21+
ENV OTEL_IMR_EXPORT_INTERVAL "10000"
22+
ENV OTEL_EXPORTER_OTLP_ENDPOINT "http://localhost:4317"
23+
ENV OTEL_EXPORTER_OTLP_PROTOCOL "grpc"
24+
25+
RUN groupadd --system spring -g 1000
26+
RUN adduser spring -u 1000 -g 1000
27+
RUN chown 1000 /opt/aws-opentelemetry-agent.jar
28+
29+
USER 1000:1000
30+
31+
EXPOSE 8080
32+
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
RUN yum install -y tar gzip unzip
3+
COPY ./pom.xml ./pom.xml
4+
COPY src ./src/
5+
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar target/store-spring.jar && cd target && unzip store-spring.jar
6+
RUN jdeps --ignore-missing-deps \
7+
--multi-release 25 --print-module-deps \
8+
--class-path="target/BOOT-INF/lib/*" \
9+
target/store-spring.jar > jre-deps.info
10+
# Adding jdk.crypto.ec for TLS 1.3 support
11+
RUN truncate --size -1 jre-deps.info
12+
RUN echo ",jdk.crypto.ec" >> jre-deps.info && cat jre-deps.info
13+
RUN export JAVA_TOOL_OPTIONS=\"-Djdk.lang.Process.launchMechanism=vfork\" && \
14+
jlink --verbose --compress 2 --strip-java-debug-attributes \
15+
--no-header-files --no-man-pages --output custom-jre \
16+
--add-modules $(cat jre-deps.info)
17+
FROM public.ecr.aws/amazonlinux/amazonlinux:2023
18+
RUN yum install -y shadow-utils
19+
COPY --from=builder target/store-spring.jar store-spring.jar
20+
COPY --from=builder custom-jre custom-jre
21+
RUN groupadd --system spring -g 1000
22+
RUN adduser spring -u 1000 -g 1000
23+
USER 1000:1000
24+
EXPOSE 8080
25+
ENTRYPOINT ["./custom-jre/bin/java","-jar","-Dserver.port=8080","/store-spring.jar"]
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
FROM quay.io/quarkus/ubi-quarkus-mandrel-builder-image:jdk-25 AS build-aot
2+
3+
USER root
4+
RUN microdnf install -y unzip zip
5+
6+
USER 1001
7+
RUN \
8+
curl -s "https://get.sdkman.io" | bash; \
9+
bash -c "source $HOME/.sdkman/bin/sdkman-init.sh; \
10+
sdk install maven;"
11+
12+
COPY ./pom.xml ./pom.xml
13+
COPY src ./src/
14+
15+
ENV MAVEN_OPTS='-Xmx8g'
16+
RUN bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && mvn -Dmaven.test.skip=true clean package -Pnative"
17+
18+
FROM public.ecr.aws/amazonlinux/amazonlinux:2023
19+
RUN yum install -y shadow-utils
20+
21+
RUN groupadd --system spring -g 1000
22+
RUN adduser spring -u 1000 -g 1000
23+
24+
COPY --from=build-aot /project/target/store-spring /
25+
26+
USER 1000:1000
27+
28+
EXPOSE 8080
29+
30+
CMD ["./store-spring", "-Dserver.port=8080"]
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
COPY ./pom.xml ./pom.xml
4+
COPY src ./src/
5+
6+
RUN mvn clean package -Psoci && \
7+
mv target/store-spring-1.0.0.jar store-spring.jar && \
8+
java -Djarmode=layertools -jar store-spring.jar extract
9+
RUN rm -rf ~/.m2/repository
10+
11+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
12+
RUN yum install -y shadow-utils
13+
14+
COPY --from=builder store-spring.jar store-spring.jar
15+
16+
RUN groupadd --system spring -g 1000
17+
RUN adduser spring -u 1000 -g 1000
18+
19+
USER 1000:1000
20+
21+
COPY --from=builder dependencies/ ./
22+
COPY --from=builder spring-boot-loader/ ./
23+
COPY --from=builder snapshot-dependencies/ ./
24+
COPY --from=builder application/ ./
25+
26+
EXPOSE 8080
27+
28+
ENTRYPOINT ["java", "-Dserver.port=8080", "org.springframework.boot.loader.launch.JarLauncher"]
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# syntax=docker/dockerfile:1
2+
# ===== build (Spring AOT + package) =====
3+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS build
4+
WORKDIR /w
5+
COPY pom.xml .
6+
COPY src ./src/
7+
RUN mvn -DskipTests clean compile org.springframework.boot:spring-boot-maven-plugin:process-aot package \
8+
&& mv target/*-exec.jar /w/app.jar \
9+
&& rm -rf ~/.m2/repository
10+
11+
# ===== train (Leyden AOT cache) =====
12+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023 AS train
13+
WORKDIR /w
14+
COPY --from=build /w/app.jar /w/app.jar
15+
# explode fat jar and make a JAR-only classpath that matches final runtime paths
16+
RUN mkdir -p /w/ex && (cd /w/ex && jar -xf /w/app.jar) \
17+
&& mkdir -p /opt/app/training /opt/app/lib \
18+
&& (cd /w/ex/BOOT-INF/classes && jar -cf /opt/app/training/classes.jar .) \
19+
&& cp -r /w/ex/BOOT-INF/lib/* /opt/app/lib/
20+
ENV APP_CP="/opt/app/training/classes.jar:/opt/app/lib/*"
21+
ENV MAIN_CLASS="com.unicorn.store.StoreApplication"
22+
# Optional: pass DB props for training in one shot
23+
# docker build --build-arg TRAINING_JAVA_OPTS="-Dspring.datasource.url=... -Dspring.datasource.username=... -Dspring.datasource.password=... -Dspring.sql.init.mode=never" ...
24+
ARG TRAINING_JAVA_OPTS=""
25+
ENV TRAINING_JAVA_OPTS=${TRAINING_JAVA_OPTS}
26+
ENV TRAINING_JAVA_OPTS_DEFAULT="-Dspring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration -Dspring.main.lazy-initialization=true"
27+
28+
# record
29+
RUN set -e; \
30+
OPTS="$TRAINING_JAVA_OPTS"; [ -z "$OPTS" ] && OPTS="$TRAINING_JAVA_OPTS_DEFAULT"; \
31+
java -XX:AOTMode=record -XX:AOTConfiguration=/w/app.aotconf \
32+
-cp "$APP_CP" -Dspring.context.exit=onRefresh $OPTS $MAIN_CLASS || true \
33+
&& test -s /w/app.aotconf
34+
35+
# create cache
36+
RUN set -e; \
37+
OPTS="$TRAINING_JAVA_OPTS"; [ -z "$OPTS" ] && OPTS="$TRAINING_JAVA_OPTS_DEFAULT"; \
38+
java -XX:AOTMode=create -XX:AOTConfiguration=/w/app.aotconf \
39+
-XX:AOTCache=/opt/app/app.aot \
40+
-cp "$APP_CP" $OPTS $MAIN_CLASS || true \
41+
&& test -s /opt/app/app.aot
42+
43+
# ===== runtime =====
44+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
45+
RUN yum install -y shadow-utils
46+
WORKDIR /opt/app
47+
COPY --from=train /opt/app/training/classes.jar /opt/app/training/classes.jar
48+
COPY --from=train /opt/app/lib/ /opt/app/lib/
49+
COPY --from=train /opt/app/app.aot /opt/app/app.aot
50+
RUN groupadd --system spring -g 1000
51+
RUN adduser spring -u 1000 -g 1000
52+
USER 1000:1000
53+
EXPOSE 8080
54+
ENTRYPOINT ["java", "-XX:AOTCache=/opt/app/app.aot", "-cp", "/opt/app/training/classes.jar:/opt/app/lib/*", "com.unicorn.store.StoreApplication"]
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
FROM public.ecr.aws/docker/library/maven:3-amazoncorretto-25-al2023 AS builder
2+
3+
RUN yum install -y wget tar gzip
4+
RUN cd /tmp && \
5+
wget https://github.com/async-profiler/async-profiler/releases/download/v3.0/async-profiler-3.0-linux-x64.tar.gz && \
6+
mkdir /async-profiler && \
7+
tar -xvzf ./async-profiler-3.0-linux-x64.tar.gz -C /async-profiler --strip-components=1
8+
9+
COPY ./pom.xml ./pom.xml
10+
COPY src ./src/
11+
12+
RUN mvn clean package && mv target/store-spring-1.0.0-exec.jar store-spring.jar
13+
RUN rm -rf ~/.m2/repository
14+
15+
FROM public.ecr.aws/docker/library/amazoncorretto:25-al2023
16+
RUN yum install -y shadow-utils procps tar
17+
18+
COPY --from=builder /async-profiler/ /async-profiler/
19+
COPY --from=builder store-spring.jar store-spring.jar
20+
21+
RUN groupadd --system spring -g 1000
22+
RUN adduser spring -u 1000 -g 1000
23+
ENV SPRING_THREADS_VIRTUAL_ENABLED=false
24+
USER 1000:1000
25+
26+
EXPOSE 8080
27+
ENTRYPOINT ["java","-jar","-Dserver.port=8080","/store-spring.jar"]

0 commit comments

Comments
 (0)