Skip to content

Instantly share code, notes, and snippets.

@figonzal1
Created September 10, 2022 19:59
Show Gist options
  • Save figonzal1/99d6af5a555fd8c644dd3b5db01edad0 to your computer and use it in GitHub Desktop.
Save figonzal1/99d6af5a555fd8c644dd3b5db01edad0 to your computer and use it in GitHub Desktop.
Multi stage docker file with multi-layer spring boot and automatic gradle build (3 Stages - build, extract and boot)
# GRADLE BUILD - DOCKER STAGE
FROM gradle:7.5.1-jdk17-alpine as builder
ENV APP_HOME=/app
WORKDIR $APP_HOME
COPY build.gradle settings.gradle $APP_HOME
COPY gradle $APP_HOME/gradle
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src
RUN gradle build || return 0
# SPRING BOOT EXTRACT LAYER - DOCKER STAGE
# REF: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#container-images.dockerfiles
FROM ibm-semeru-runtimes:open-17.0.4.1_1-jdk-jammy as extracter
ENV JAR_FILE=myapp.jar
ENV APP_HOME=/app
WORKDIR $APP_HOME
COPY --from=builder $APP_HOME/build/libs/$JAR_FILE .
RUN java -Djarmode=layertools -jar $JAR_FILE extract
# BOOTJAR SPRING BOOT WITH UNPACK JAR - DOCKER STAGE
# REF: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#container-images.efficient-images.unpacking
FROM ibm-semeru-runtimes:open-17.0.4.1_1-jre-jammy
ENV APP_HOME=/app
WORKDIR $APP_HOME
RUN adduser --no-create-home --disabled-password springuser
USER springuser:springuser
COPY --from=extracter $APP_HOME/dependencies/ ./
COPY --from=extracter $APP_HOME/spring-boot-loader/ ./
COPY --from=extracter $APP_HOME/snapshot-dependencies/ ./
COPY --from=extracter $APP_HOME/application/ ./
ENTRYPOINT ["java","-cp","BOOT-INF/classes:BOOT-INF/lib/*","com.example.MyMainClass"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment