Setting the file. One moment.
Skill 114 · Create Spring Boot Java Project
Subchapter 114.11
assets/Dockerfile-native
DOCKERFILE-NATIVE40 lines1 KB
# syntax=docker/dockerfile:1
#
# Multi-stage GraalVM native image for a Spring Boot Maven project.
# Adapted from jdubois/dr-jskill (Apache-2.0); see references/PROVENANCE.md.
# Requires the `native` dependency (native-maven-plugin and the `native` profile).
#
# docker build -f Dockerfile-native -t my-spring-app-native .
# docker run --rm -p 8080:8080 my-spring-app-native
FROM ghcr.io/graalvm/graalvm-community:25 AS build
WORKDIR /app
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
RUN chmod +x mvnw && ./mvnw dependency:go-offline -B
COPY src ./src
ENV NATIVE_IMAGE_OPTIONS="-H:+StaticExecutableWithDynamicLibC"
RUN ./mvnw -Pnative -DskipTests -B package native:compile
# The executable is named after the artifactId; copy it to a fixed name.
# GraalVM 25 also drops executable libjava.so/libjvm.so stubs next to it: skip them.
RUN native_exe=$(find target -maxdepth 1 -type f -executable ! -name '*.jar' ! -name '*.original' ! -name '*.so' | head -1) && \
test -n "$native_exe" && cp "$native_exe" native-app
FROM gcr.io/distroless/base-debian12:nonroot
WORKDIR /app
COPY --from=build --chown=nonroot:nonroot /app/native-app native-app
USER nonroot
EXPOSE 8080
ENTRYPOINT ["./native-app"]