-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDockerfile
More file actions
38 lines (35 loc) · 2.03 KB
/
Copy pathDockerfile
File metadata and controls
38 lines (35 loc) · 2.03 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
FROM --platform=$BUILDPLATFORM gradle:8.5-jdk17 AS deps
WORKDIR /app
COPY gradle gradle
COPY gradlew gradlew.bat ./
COPY settings.gradle.kts ./
RUN ./gradlew --version
COPY buildSrc buildSrc
RUN ./gradlew buildSrc:build --no-daemon --parallel
COPY build.gradle.kts ./
RUN ./gradlew dependencies --no-daemon --parallel --build-cache
FROM deps AS builder
COPY src src
RUN ./gradlew bootJar -x test --no-daemon --parallel --build-cache \
-Dorg.gradle.caching=true \
-Dorg.gradle.parallel=true \
-Dorg.gradle.jvmargs="-Xmx2g -XX:+UseParallelGC" && \
JAR_FILE=$(find build/libs -name "*.jar" ! -name "*-plain.jar" | head -n 1) && \
if [ -z "$JAR_FILE" ]; then echo "ERROR: No JAR found" >&2; exit 1; fi && \
echo "Using JAR: $JAR_FILE" && \
java -Djarmode=layertools -jar "$JAR_FILE" extract --destination /app/extracted
FROM eclipse-temurin:17-jre AS optimizer
WORKDIR /app
COPY --from=builder /app/extracted/dependencies/ ./
COPY --from=builder /app/extracted/spring-boot-loader/ ./
COPY --from=builder /app/extracted/snapshot-dependencies/ ./
COPY --from=builder /app/extracted/application/ ./
RUN java -XX:ArchiveClassesAtExit=/app/app.jsa \
-Dspring.context.exit=onRefresh \
org.springframework.boot.loader.JarLauncher || true
FROM gcr.io/distroless/java17-debian12:nonroot AS runtime
WORKDIR /app
COPY --from=optimizer /app/ ./
EXPOSE 8080
ENV JAVA_TOOL_OPTIONS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0 -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:G1HeapRegionSize=16m -XX:ParallelGCThreads=2 -XX:ConcGCThreads=1 -XX:+UseStringDeduplication -XX:+OptimizeStringConcat -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+TieredCompilation -XX:+ExitOnOutOfMemoryError -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:ReservedCodeCacheSize=256m -XX:SharedArchiveFile=/app/app.jsa -Djava.security.egd=file:/dev/./urandom -Dspring.backgroundpreinitializer.ignore=true -Dspring.jmx.enabled=false -Dspring.main.lazy-initialization=false"
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]