-
Notifications
You must be signed in to change notification settings - Fork 3
/
Dockerfile
75 lines (63 loc) · 2.32 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# sync with https://github.com/fphammerle/wireless-sensor-mqtt/blob/master/Dockerfile
# not using python:3.*-alpine cause glib-dev package depends on python3
# https://pkgs.alpinelinux.org/package/v3.11/main/aarch64/glib-dev
ARG BASE_IMAGE=docker.io/alpine:3.13.1
ARG SOURCE_DIR_PATH=/systemctl-mqtt
# hadolint ignore=DL3006
FROM $BASE_IMAGE as build
RUN apk add --no-cache \
cairo-dev `# PyGObject > pycairo` \
dbus-dev \
gcc \
git `# setuptools_scm` \
glib-dev `# dbus-python` \
gobject-introspection-dev `# PyGObject` \
jq `# edit Pipfile.lock` \
make `# dbus-python` \
musl-dev `# dbus-python` \
py3-certifi `# pipenv` \
py3-pip `# pipenv install` \
py3-virtualenv `# pipenv` \
python3-dev `# dbus-python` \
&& adduser -S build
USER build
RUN pip3 install --user --no-cache-dir pipenv==2021.5.29
ARG 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."systemctl-mqtt", .default."sanitized-package")' 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 \
&& rm -rf .git/ $PIPENV_CACHE_DIR \
&& chmod -cR a+rX .
# workaround for broken multi-stage copy
# > failed to copy files: failed to copy directory: Error processing tar file(exit status 1): Container ID ... cannot be mapped to a host ID
USER 0
RUN chown -R 0:0 $SOURCE_DIR_PATH
USER build
# hadolint ignore=DL3006
FROM $BASE_IMAGE
RUN apk add --no-cache \
ca-certificates \
dbus-libs \
glib `# PyGObject` \
gobject-introspection `# PyGObject` \
python3 \
tini \
&& find / -xdev -type f -perm /u+s -exec chmod -c u-s {} \; \
&& find / -xdev -type f -perm /g+s -exec chmod -c g-s {} \;
USER nobody
ARG SOURCE_DIR_PATH
COPY --from=build $SOURCE_DIR_PATH $SOURCE_DIR_PATH
ARG VIRTUALENV_PATH=$SOURCE_DIR_PATH/.venv
ENV PATH=$VIRTUALENV_PATH/bin:$PATH
ENTRYPOINT ["tini", "--"]
CMD ["systemctl-mqtt", "--help"]