From 5b5b105ee252219f02787bccc0f7a5c618b49691 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Mon, 22 Jun 2020 14:10:25 +0200 Subject: [PATCH 1/3] Use Spring Boot layered jars to optimize Docker images --- docker-compose.yml | 12 ++++++------ docker/Dockerfile | 24 +++++++++++++++++------- pom.xml | 5 +++++ 3 files changed, 28 insertions(+), 13 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 93c0a42d3..c06448582 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,7 +14,7 @@ services: mem_limit: 512M depends_on: - config-server - entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://config-server:8888","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 8761:8761 @@ -25,7 +25,7 @@ services: depends_on: - config-server - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 8081:8081 @@ -36,7 +36,7 @@ services: depends_on: - config-server - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 8082:8082 @@ -47,7 +47,7 @@ services: depends_on: - config-server - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 8083:8083 @@ -58,7 +58,7 @@ services: depends_on: - config-server - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 8080:8080 @@ -78,7 +78,7 @@ services: depends_on: - config-server - discovery-server - entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] + entrypoint: ["./dockerize","-wait=tcp://discovery-server:8761","-timeout=60s","--","java", "org.springframework.boot.loader.JarLauncher"] ports: - 9090:9090 diff --git a/docker/Dockerfile b/docker/Dockerfile index 52aef406e..73e958b36 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,19 +1,29 @@ -FROM openjdk:8-jre-alpine -VOLUME /tmp +FROM adoptopenjdk:11-jre-hotspot as builder +WORKDIR application +ARG ARTIFACT_NAME +COPY ${ARTIFACT_NAME}.jar application.jar +RUN java -Djarmode=layertools -jar application.jar extract + + +# wget is not installed on adoptopenjdk:11-jre-hotspot +FROM openjdk:11-jre + +WORKDIR application # Download dockerize and cache that layer ARG DOCKERIZE_VERSION RUN wget -O dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz RUN tar xzf dockerize.tar.gz +RUN rm dockerize.tar.gz RUN chmod +x dockerize -# This is the first layer that won't be cached -ARG ARTIFACT_NAME -ADD ${ARTIFACT_NAME}.jar /app.jar - ARG EXPOSED_PORT EXPOSE ${EXPOSED_PORT} ENV SPRING_PROFILES_ACTIVE docker -ENTRYPOINT ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] +COPY --from=builder application/dependencies/ ./ +COPY --from=builder application/spring-boot-loader/ ./ +COPY --from=builder application/snapshot-dependencies/ ./ +COPY --from=builder application/application/ ./ +ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"] diff --git a/pom.xml b/pom.xml index efb4ef384..468e8cfd8 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,7 @@ + springboot @@ -88,6 +89,10 @@ spring-boot-maven-plugin true + + + true + From 73da27fc4e8525469f0ba8680f5baece7e88e9bd Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Mon, 22 Jun 2020 15:24:16 +0200 Subject: [PATCH 2/3] Move dockerize into the builder stage --- docker/Dockerfile | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 73e958b36..8440b9c0c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,15 +1,9 @@ -FROM adoptopenjdk:11-jre-hotspot as builder +FROM openjdk:11-jre as builder WORKDIR application ARG ARTIFACT_NAME COPY ${ARTIFACT_NAME}.jar application.jar RUN java -Djarmode=layertools -jar application.jar extract - -# wget is not installed on adoptopenjdk:11-jre-hotspot -FROM openjdk:11-jre - -WORKDIR application - # Download dockerize and cache that layer ARG DOCKERIZE_VERSION RUN wget -O dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz @@ -17,6 +11,15 @@ RUN tar xzf dockerize.tar.gz RUN rm dockerize.tar.gz RUN chmod +x dockerize + +# wget is not installed on adoptopenjdk:11-jre-hotspot +FROM adoptopenjdk:11-jre-hotspot + +WORKDIR application + +# Dockerize +COPY --from=builder application/dockerize ./ + ARG EXPOSED_PORT EXPOSE ${EXPOSED_PORT} From 48816a9d1d1324eca12421c73de027773ba9caa5 Mon Sep 17 00:00:00 2001 From: Antoine Rey Date: Mon, 22 Jun 2020 15:28:53 +0200 Subject: [PATCH 3/3] Remove RUN rm dockerize.tar.gz --- docker/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 8440b9c0c..959770892 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,7 +8,6 @@ RUN java -Djarmode=layertools -jar application.jar extract ARG DOCKERIZE_VERSION RUN wget -O dockerize.tar.gz https://github.com/jwilder/dockerize/releases/download/${DOCKERIZE_VERSION}/dockerize-alpine-linux-amd64-${DOCKERIZE_VERSION}.tar.gz RUN tar xzf dockerize.tar.gz -RUN rm dockerize.tar.gz RUN chmod +x dockerize