51 lines
1.8 KiB
Docker
51 lines
1.8 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
FROM eclipse-temurin:21-jdk-jammy AS deps
|
|
WORKDIR /build
|
|
COPY --chmod=0755 mvnw mvnw
|
|
COPY .mvn .mvn
|
|
COPY pom.xml .
|
|
RUN --mount=type=cache,target=/root/.m2 ./mvnw dependency:go-offline -DskipTests
|
|
|
|
# Compile and package the application
|
|
FROM deps AS package
|
|
WORKDIR /build
|
|
ARG CACHEBUST
|
|
COPY src src
|
|
RUN --mount=type=cache,target=/root/.m2 ./mvnw package -DskipTests && \
|
|
mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-\
|
|
$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar
|
|
|
|
# Extract layers from the packaged jar
|
|
FROM package AS extract
|
|
WORKDIR /build
|
|
RUN java -Djarmode=layertools -jar target/app.jar extract --destination target/extracted
|
|
|
|
# DEVELOPMENT: Use the JDK and enable remote debugging.
|
|
FROM extract AS development
|
|
WORKDIR /build
|
|
RUN cp -r /build/target/extracted/dependencies/ ./
|
|
RUN cp -r /build/target/extracted/spring-boot-loader/ ./
|
|
RUN cp -r /build/target/extracted/snapshot-dependencies/ ./
|
|
RUN cp -r /build/target/extracted/application/ ./
|
|
ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
|
|
CMD ["java", "-Dspring.profiles.active=default", "org.springframework.boot.loader.launch.JarLauncher"]
|
|
|
|
# PRODUCTION: Use the JRE and a non-root user.
|
|
FROM eclipse-temurin:21-jre-jammy AS production
|
|
ARG UID=10001
|
|
RUN adduser \
|
|
--disabled-password \
|
|
--gecos "" \
|
|
--home "/nonexistent" \
|
|
--shell "/sbin/nologin" \
|
|
--no-create-home \
|
|
--uid "${UID}" \
|
|
appuser
|
|
USER appuser
|
|
COPY --from=extract /build/target/extracted/dependencies/ ./
|
|
COPY --from=extract /build/target/extracted/spring-boot-loader/ ./
|
|
COPY --from=extract /build/target/extracted/snapshot-dependencies/ ./
|
|
COPY --from=extract /build/target/extracted/application/ ./
|
|
|
|
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"] |