From 0794fb8d5a289a3c4e5a180cc203b4f8565c04bb Mon Sep 17 00:00:00 2001 From: Nicolas Dorier Date: Wed, 6 Dec 2017 01:29:47 +0900 Subject: [PATCH] Docker support with repeatable build (#255) Dependency to `git` has been removed, we now use `notag` when building without a git directory. In order to reliably fetch all dependencies, we do a first blank build (with no source files), then we copy the sources and do a real commit. This is a simpler and more robust approach. Also, fixed the .dockerignore to filter out IDE files. --- .dockerignore | 6 +++++ Dockerfile | 49 +++++++++++++++++++++++++++++++++++++++++ eclair-core/pom.xml | 11 --------- eclair-node-gui/pom.xml | 11 --------- eclair-node/pom.xml | 11 --------- pom.xml | 18 +++++++++++++++ 6 files changed, 73 insertions(+), 33 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..f11e66fd9 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +Dockerfile +.dockerignore +.git +**/*.idea +**/*.iml +**/target diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..b879f48f9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +FROM openjdk:8u121-jdk-alpine as BUILD + +# Setup maven, we don't use https://hub.docker.com/_/maven/ as it declare .m2 as volume, we loose all mvn cache +# We can alternatively do as proposed by https://github.com/carlossg/docker-maven#packaging-a-local-repository-with-the-image +# this was meant to make the image smaller, but we use multi-stage build so we don't care + +RUN apk add --no-cache curl tar bash + +ARG MAVEN_VERSION=3.5.2 +ARG USER_HOME_DIR="/root" +ARG SHA=707b1f6e390a65bde4af4cdaf2a24d45fc19a6ded00fff02e91626e3e42ceaff +ARG BASE_URL=https://apache.osuosl.org/maven/maven-3/${MAVEN_VERSION}/binaries + +RUN mkdir -p /usr/share/maven /usr/share/maven/ref \ + && curl -fsSL -o /tmp/apache-maven.tar.gz ${BASE_URL}/apache-maven-${MAVEN_VERSION}-bin.tar.gz \ + && echo "${SHA} /tmp/apache-maven.tar.gz" | sha256sum -c - \ + && tar -xzf /tmp/apache-maven.tar.gz -C /usr/share/maven --strip-components=1 \ + && rm -f /tmp/apache-maven.tar.gz \ + && ln -s /usr/share/maven/bin/mvn /usr/bin/mvn + +ENV MAVEN_HOME /usr/share/maven +ENV MAVEN_CONFIG "$USER_HOME_DIR/.m2" + +# Let's fetch eclair dependencies, so that Docker can cache them +# This way we won't have to fetch dependencies again if only the source code changes +# The easiest way to reliably get dependencies is to build the project with no sources +WORKDIR /usr/src +COPY pom.xml pom.xml +COPY eclair-core/pom.xml eclair-core/pom.xml +COPY eclair-node/pom.xml eclair-node/pom.xml +COPY eclair-node-gui/pom.xml eclair-node-gui/pom.xml +RUN mkdir -p eclair-core/src/main/scala && touch eclair-core/src/main/scala/empty.scala +# Blank build. We only care about eclair-node, and we use install because eclair-node depends on eclair-core +RUN mvn install -pl eclair-node -am clean + +# Only then do we copy the sources +COPY . . + +# And this time we can build in offline mode +RUN mvn package -pl eclair-node -am -DskipTests -o +# It might be good idea to run the tests here, so that the docker build fail if the code is bugged + +# We currently use a debian image for runtime because of some jni-related issue with sqlite +FROM openjdk:8u151-jre-slim +WORKDIR /app +# Eclair only needs the eclair-node-*.jar to run +COPY --from=BUILD /usr/src/eclair-node/target/eclair-node-*.jar . +RUN ln `ls` eclair-node +ENTRYPOINT [ "java", "-jar", "eclair-node" ] \ No newline at end of file diff --git a/eclair-core/pom.xml b/eclair-core/pom.xml index ebd89b9a9..f3d0a5ee2 100644 --- a/eclair-core/pom.xml +++ b/eclair-core/pom.xml @@ -15,17 +15,6 @@ - - pl.project13.maven - git-commit-id-plugin - - - - revision - - - - com.googlecode.maven-download-plugin download-maven-plugin diff --git a/eclair-node-gui/pom.xml b/eclair-node-gui/pom.xml index 0f69bce06..012385b3f 100644 --- a/eclair-node-gui/pom.xml +++ b/eclair-node-gui/pom.xml @@ -15,17 +15,6 @@ - - pl.project13.maven - git-commit-id-plugin - - - - revision - - - - org.apache.maven.plugins maven-jar-plugin diff --git a/eclair-node/pom.xml b/eclair-node/pom.xml index 207a49ed7..0f0a70721 100644 --- a/eclair-node/pom.xml +++ b/eclair-node/pom.xml @@ -15,17 +15,6 @@ - - pl.project13.maven - git-commit-id-plugin - - - - revision - - - - org.apache.maven.plugins maven-jar-plugin diff --git a/pom.xml b/pom.xml index 041b69059..36001960e 100644 --- a/pom.xml +++ b/pom.xml @@ -47,6 +47,9 @@ UTF-8 1.8 1.8 + + notag + notag 2.11.11 2.11 2.4.18 @@ -85,6 +88,21 @@ versions-maven-plugin 2.3 + + pl.project13.maven + git-commit-id-plugin + 2.2.2 + + + + revision + + + false + + + + net.alchim31.maven scala-maven-plugin