Dockerfile 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. ARG BASE_IMAGE=docker.io/python:3.8.7-slim-buster
  2. ARG SOURCE_DIR_PATH=/location-guessing-game-telegram-bot
  3. # hadolint ignore=DL3006
  4. FROM $BASE_IMAGE as build
  5. RUN apt-get update \
  6. && apt-get install --no-install-recommends --yes \
  7. ca-certificates \
  8. git `# setuptools_scm` \
  9. jq `# edit Pipfile.lock` \
  10. && rm -rf /var/lib/apt/lists/* \
  11. && useradd --create-home build
  12. USER build
  13. RUN pip install --user --no-cache-dir pipenv==2020.11.15
  14. ARG SOURCE_DIR_PATH
  15. COPY --chown=build Pipfile Pipfile.lock $SOURCE_DIR_PATH/
  16. WORKDIR $SOURCE_DIR_PATH
  17. ENV PIPENV_CACHE_DIR=/tmp/pipenv-cache \
  18. PIPENV_VENV_IN_PROJECT=yes-please \
  19. PATH=/home/build/.local/bin:$PATH
  20. # `sponge` is not pre-installed
  21. RUN jq 'del(.default."location-guessing-game-telegram-bot")' Pipfile.lock > Pipfile.lock~ \
  22. && mv Pipfile.lock~ Pipfile.lock \
  23. && pipenv install --deploy \
  24. && rm -rf $PIPENV_CACHE_DIR
  25. COPY --chown=build . $SOURCE_DIR_PATH
  26. RUN pipenv install --deploy \
  27. && pipenv run location-guessing-game-telegram-bot --help \
  28. && pipenv graph \
  29. && pipenv run pip freeze \
  30. && rm -rf .git/ $PIPENV_CACHE_DIR \
  31. && chmod -cR a+rX .
  32. # workaround for broken multi-stage copy
  33. # > failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID ... cannot be mapped to a host ID
  34. USER 0
  35. RUN chown -R 0:0 $SOURCE_DIR_PATH
  36. USER build
  37. # hadolint ignore=DL3006
  38. FROM $BASE_IMAGE
  39. RUN apt-get update \
  40. && apt-get install --no-install-recommends --yes ca-certificates \
  41. && rm -rf /var/lib/apt/lists/* \
  42. && find / -xdev -type f -perm /u+s -exec chmod -c u-s {} \; \
  43. && find / -xdev -type f -perm /g+s -exec chmod -c g-s {} \;
  44. USER nobody
  45. ARG SOURCE_DIR_PATH
  46. COPY --from=build $SOURCE_DIR_PATH $SOURCE_DIR_PATH
  47. ENV PATH=$SOURCE_DIR_PATH/.venv/bin:$PATH
  48. WORKDIR $SOURCE_DIR_PATH
  49. CMD ["location-guessing-game-telegram-bot"]