Skip to content

Instantly share code, notes, and snippets.

@docwhat
Created May 18, 2018 18:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save docwhat/6817903ab2554531e33c055584d4eb8a to your computer and use it in GitHub Desktop.
Save docwhat/6817903ab2554531e33c055584d4eb8a to your computer and use it in GitHub Desktop.
Multi-stage maven dockerfile with caching
# Requires docker 17.06 to build
# ----
# Install Maven
FROM openjdk:8-jdk-alpine AS maven
RUN apk add --no-cache curl tar bash
ARG MAVEN_VERSION=3.3.9
ARG USER_HOME_DIR="/root"
RUN mkdir -p /usr/share/maven && \
curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -xzC /usr/share/maven --strip-components=1 && \
ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV MAVEN_HOME /usr/share/maven
ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2"
# speed up Maven JVM a bit
ENV MAVEN_OPTS="-XX:+TieredCompilation -XX:TieredStopAtLevel=1 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn"
ENTRYPOINT ["/usr/bin/mvn"]
# ----
# Install project dependencies and keep sources
FROM maven AS builder
# make source folder
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# install maven dependency packages (keep in image)
COPY pom.xml /usr/src/app
RUN mvn --batch-mode --threads 1C install && rm -rf target
# copy other source files (keep in image)
COPY src /usr/src/app/src
# ----
# Run tests
FROM builder AS test
RUN mvn --batch-mode --threads 1C --offline test
# ----
# Compile code
FROM builder AS compile
RUN mvn --batch-mode --threads 1C --offline -Dmaven.test.skip=true package
# ----
# Build final image
FROM jetty:jre8-alpine as final
COPY --from=compile \
/usr/src/app/target/example.war \
/var/lib/jetty/webapps/example.war
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment