Browse Source

dockerfile: split `pipenv install` into two stages to speed up image builds

https://github.com/fphammerle/wireless-sensor-mqtt/blob/3d9e2169b28b85d6d88ba1049fc1ca57c9464c83/Dockerfile
https://github.com/fphammerle/systemctl-mqtt/commit/3436c4744f6b177ed078e32df3850fcfd25186b8
Fabian Peter Hammerle 3 years ago
parent
commit
ddcb23a446
2 changed files with 10 additions and 1 deletions
  1. 1 0
      CHANGELOG.md
  2. 9 1
      Dockerfile

+ 1 - 0
CHANGELOG.md

@@ -6,6 +6,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 ### Fixed
+- dockerfile: split `pipenv install` into two stages to speed up image builds
 - dockerfile: `chmod` files copied from host to no longer require `o=rX` perms on host
 
 ## [0.6.0] - 2020-12-19

+ 9 - 1
Dockerfile

@@ -6,12 +6,14 @@ ARG BASE_IMAGE=alpine:3.13.1
 ARG SOURCE_DIR_PATH=/switchbot-mqtt
 
 
+# hadolint ignore=DL3006
 FROM $BASE_IMAGE as build
 
 RUN apk add --no-cache \
         gcc \
         git `# setuptools_scm` \
         glib-dev \
+        jq `# edit Pipfile.lock` \
         make \
         musl-dev \
         py3-certifi `# pipenv` \
@@ -23,11 +25,16 @@ USER build
 RUN pip3 install --user --no-cache-dir pipenv==2020.6.2
 
 ARG SOURCE_DIR_PATH
-COPY --chown=build:nobody . $SOURCE_DIR_PATH
+COPY --chown=build:nobody Pipfile Pipfile.lock $SOURCE_DIR_PATH/
 WORKDIR $SOURCE_DIR_PATH
 ENV PIPENV_CACHE_DIR=/tmp/pipenv-cache \
     PIPENV_VENV_IN_PROJECT=yes-please \
     PATH=/home/build/.local/bin:$PATH
+# `sponge` is not pre-installed
+RUN jq 'del(.default."switchbot-mqtt")' Pipfile.lock > Pipfile.lock~ \
+    && mv Pipfile.lock~ Pipfile.lock \
+    && pipenv install --deploy --verbose
+COPY --chown=build:nobody . $SOURCE_DIR_PATH
 RUN pipenv install --deploy --verbose \
     && pipenv graph \
     && pipenv run pip freeze \
@@ -41,6 +48,7 @@ RUN chown -R 0:0 $SOURCE_DIR_PATH
 USER build
 
 
+# hadolint ignore=DL3006
 FROM $BASE_IMAGE
 
 RUN apk add --no-cache \