Dockerfile 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # sync with https://github.com/fphammerle/wireless-sensor-mqtt/blob/master/Dockerfile
  2. # not using python:3.*-alpine cause glib-dev package depends on python3
  3. # https://pkgs.alpinelinux.org/package/v3.11/main/aarch64/glib-dev
  4. ARG BASE_IMAGE=alpine:3.11
  5. ARG SOURCE_DIR_PATH=/systemctl-mqtt
  6. # hadolint ignore=DL3006
  7. FROM $BASE_IMAGE as build
  8. RUN apk add --no-cache \
  9. cairo-dev `# PyGObject > pycairo` \
  10. dbus-dev \
  11. gcc \
  12. git `# setuptools_scm` \
  13. glib-dev `# dbus-python` \
  14. gobject-introspection-dev `# PyGObject` \
  15. jq `# edit Pipfile.lock` \
  16. make `# dbus-python` \
  17. musl-dev `# dbus-python` \
  18. py3-certifi `# pipenv` \
  19. py3-virtualenv `# pipenv` \
  20. python3-dev `# dbus-python` \
  21. && adduser -S build
  22. USER build
  23. RUN pip3 install --user --no-cache-dir pipenv==2020.6.2
  24. ARG SOURCE_DIR_PATH
  25. COPY --chown=build:nobody Pipfile Pipfile.lock $SOURCE_DIR_PATH/
  26. WORKDIR $SOURCE_DIR_PATH
  27. ENV PIPENV_CACHE_DIR=/tmp/pipenv-cache \
  28. PIPENV_VENV_IN_PROJECT=yes-please \
  29. PATH=/home/build/.local/bin:$PATH
  30. # `sponge` is not pre-installed
  31. RUN jq 'del(.default."systemctl-mqtt")' Pipfile.lock > Pipfile.lock~ \
  32. && mv Pipfile.lock~ Pipfile.lock \
  33. && pipenv install --deploy --verbose
  34. COPY --chown=build:nobody . $SOURCE_DIR_PATH
  35. RUN pipenv install --deploy --verbose \
  36. && pipenv graph \
  37. && pipenv run pip freeze \
  38. && rm -r .git/ $PIPENV_CACHE_DIR
  39. # workaround for broken multi-stage copy
  40. # > failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID ... cannot be mapped to a host ID
  41. USER 0
  42. RUN chown -R 0:0 $SOURCE_DIR_PATH
  43. USER build
  44. # hadolint ignore=DL3006
  45. FROM $BASE_IMAGE
  46. RUN apk add --no-cache \
  47. ca-certificates \
  48. dbus-libs \
  49. glib `# PyGObject` \
  50. gobject-introspection `# PyGObject` \
  51. python3 \
  52. tini \
  53. && find / -xdev -type f -perm /u+s -exec chmod -c u-s {} \; \
  54. && find / -xdev -type f -perm /g+s -exec chmod -c g-s {} \;
  55. USER nobody
  56. ARG SOURCE_DIR_PATH
  57. COPY --from=build $SOURCE_DIR_PATH $SOURCE_DIR_PATH
  58. ARG VIRTUALENV_PATH=$SOURCE_DIR_PATH/.venv
  59. ENV PATH=$VIRTUALENV_PATH/bin:$PATH
  60. ENTRYPOINT ["tini", "--"]
  61. CMD ["systemctl-mqtt", "--help"]