Dockerfile 1.9 KB

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