From 8b6432d58d8de367bb54a9b54c32927f5dd7c550 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 4 Jan 2018 12:28:11 +0100 Subject: [PATCH] Optimize java-worker image This patch optimizes the java-worker image; - Use multi-stage build to separate the build-stage from the "deploy" stage - Switch to the official Maven image, instead of manual installation of Maven. The official Maven image is also based on the `openjdk` repository on Docker Hub, which replaces the (now deprecated) `java` repository. - Use `COPY` instead of `ADD` to follow best-practice - Add `-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap` arguments so that JAVA will take memory-limits into account - Use a JRE base image for the final build-stage This change brings the size of the final image down from 184MB to 87MB Signed-off-by: Sebastiaan van Stijn --- worker/Dockerfile.j | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/worker/Dockerfile.j b/worker/Dockerfile.j index f90fcba..85c33a5 100644 --- a/worker/Dockerfile.j +++ b/worker/Dockerfile.j @@ -1,19 +1,17 @@ -FROM java:openjdk-8-jdk-alpine - -RUN MAVEN_VERSION=3.3.3 \ - && cd /usr/share \ - && wget http://archive.apache.org/dist/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz -O - | tar xzf - \ - && mv /usr/share/apache-maven-$MAVEN_VERSION /usr/share/maven \ - && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn +FROM maven:3.5-jdk-8-alpine AS build WORKDIR /code -ADD pom.xml /code/pom.xml +COPY pom.xml /code/pom.xml RUN ["mvn", "dependency:resolve"] RUN ["mvn", "verify"] # Adding source, compile and package into a fat jar -ADD src/main /code/src/main +COPY ["src/main", "/code/src/main"] RUN ["mvn", "package"] -CMD ["java", "-jar", "target/worker-jar-with-dependencies.jar"] +FROM openjdk:8-jre-alpine + +COPY --from=build /code/target/worker-jar-with-dependencies.jar / + +CMD ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar", "/worker-jar-with-dependencies.jar"]