This is an automated email from the ASF dual-hosted git repository. dzamo pushed a commit to branch 7999-docker-jdk in repository https://gitbox.apache.org/repos/asf/drill.git
commit aeb41514c1bfc344a8ef774c227bae4e63f422e4 Author: James Turton <[email protected]> AuthorDate: Thu Sep 16 14:28:40 2021 +0200 Make the OpenJDK base image name a variable. This allows using a single Dockerfile to target a variety of OpenJDK versions. --- .dockerignore | 5 +++-- Dockerfile | 44 ++++++++++++++++++++++++++++++-------------- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/.dockerignore b/.dockerignore index c54d602..aabd129 100644 --- a/.dockerignore +++ b/.dockerignore @@ -18,9 +18,10 @@ .dockerignore Dockerfile .git +**/.project # The top-level Dockerfile does its own Maven build so we don't want -# distribution/target. See distribution/Dockerfile for a Dockerfile that +# **/target. See distribution/Dockerfile for a Dockerfile that # builds an image using binaries copied from distribution/target. -distribution/target +**/target diff --git a/Dockerfile b/Dockerfile index 5a2f884..6976a90 100755 --- a/Dockerfile +++ b/Dockerfile @@ -18,23 +18,33 @@ # This Dockerfile is used for automated builds in DockerHub. It adds # project sources into the build image, builds Drill and copies built -# binaries into the target image based on openjdk:11 image. +# binaries into the target image based on the image name in BASE_NAME +# env var which you should set when invoking docker build. +# Example BASE_NAME values: openjdk:8-jre, openjdk:11-jre, openjdk:latest # Uses intermediate image for building Drill to reduce target image size -FROM maven:3.8.2-jdk-11 as build - -# Copy project sources into the container -COPY . /src +FROM maven:3.8.2-openjdk-11 as build WORKDIR /src -# Fetch Drill build deps in a separate layer from the build so that they are -# cached even if the Maven build fails. Fetch up to 4 dependencies in -# parallel. -RUN mvn -Dmaven.artifact.threads=4 dependency:resolve +# Copy project sources into the container +COPY . . + +# Optimisation: build a selection of Drill modules in advance. +# It isn't necessary to build any modules independently but doing so divides +# the downloading and compiling up over multiple cacheable layers, better +# enabling reuse in the event of an isolated change and resume in the event +# of a build error. This paragraph can safely be commented out. +RUN mvn -am -pl tools -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl protocol -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl common -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl logical -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl exec -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl drill-yarn -Dmaven.artifact.threads=5 -T1C install -DskipTests +RUN mvn -am -pl distribution -Dmaven.artifact.threads=5 -T1C install -DskipTests # Builds Drill -RUN mvn -T1C clean install -DskipTests -q +RUN mvn -Dmaven.artifact.threads=5 -T1C install -DskipTests # Get project version and copy built binaries into /opt/drill directory RUN VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec) \ @@ -42,11 +52,17 @@ RUN VERSION=$(mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --n && mv distribution/target/apache-drill-${VERSION}/apache-drill-${VERSION}/* /opt/drill # Target image -FROM openjdk:11 -RUN mkdir /opt/drill +# Set the BASE_IMAGE env var when you invoke docker build. +FROM $BASE_IMAGE + +ENV DRILL_HOME=/opt/drill + +RUN mkdir $DRILL_HOME -COPY --from=build /opt/drill /opt/drill +COPY --from=build /opt/drill $DRILL_HOME # Starts Drill in embedded mode and connects to Sqlline -ENTRYPOINT /opt/drill/bin/drill-embedded +ENTRYPOINT $DRILL_HOME/bin/drill-embedded + +
