-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathDockerfile.binary
83 lines (61 loc) · 2.36 KB
/
Dockerfile.binary
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
76
77
78
79
80
81
82
83
# syntax = docker/dockerfile:1.4.0
ARG ALPINE_VERSION="3.18"
ARG FROM_IMAGE="moonbuggy2000/alpine-s6:${ALPINE_VERSION}"
ARG BUILD_PYTHON_VERSION="3.11"
ARG TARGET_OS="alpine"
ARG TARGET_ARCH_TAG="amd64"
ARG BUILDER_ROOT="/builder_root"
## build the binary and prepare files
#
FROM "moonbuggy2000/nuitka:py${BUILD_PYTHON_VERSION}-${TARGET_OS}-${TARGET_ARCH_TAG}" AS builder
ARG APP_PATH="/app"
WORKDIR "${APP_PATH}"
# Python wheels from pre_build
ARG IMPORTS_DIR=".imports"
ARG TARGETARCH="amd64"
ARG TARGETVARIANT=""
COPY _dummyfile "${IMPORTS_DIR}/${TARGETARCH}${TARGETVARIANT}*" "/${IMPORTS_DIR}/"
# setup Python requirements
ARG AGENT_STRING=''
COPY "./requirements${AGENT_STRING}.txt" ./requirements.txt
ARG API_BACKEND="${API_BACKEND:-}"
RUN echo "${API_BACKEND}" >> ./requirements.txt
# use a PyPi proxy, if provided
ARG PYPI_INDEX="https://pypi.org/simple"
RUN (mv /etc/pip.conf /etc/pip.conf.bak || true) \
&& printf '%s\n' '[global]' " index-url = ${PYPI_INDEX}" \
" trusted-host = $(echo "${PYPI_INDEX}" | cut -d'/' -f3 | cut -d':' -f1)" \
>/etc/pip.conf
RUN python3 -m pip install ${PIP_ARGS} --upgrade pip \
&& python3 -m pip install --only-binary=:all: --find-links "/${IMPORTS_DIR}/" -r requirements.txt \
|| python3 -m pip install --find-links "/${IMPORTS_DIR}/" -r requirements.txt
ARG FILE_STRING="dnsmasq_updater${AGENT_STRING}"
COPY "./${FILE_STRING}.py" ./
# Nuitka build
ARG DMU_VERSION="dev"
RUN python3 -m nuitka --show-progress \
--standalone \
--clang \
--output-dir="${BUILDER_ROOT}${APP_PATH}" \
--output-filename="${FILE_STRING}" \
--product-version="${DMU_VERSION}" \
--no-deployment-flag=self-execution \
"${FILE_STRING}.py"
RUN mkdir "./${FILE_STRING}.dist/keys" \
&& mkdir "./${FILE_STRING}.dist/conf"
# organize files
ARG BUILDER_ROOT
RUN mkdir -p "${BUILDER_ROOT}" \
&& mv "${FILE_STRING}".dist "${BUILDER_ROOT}${APP_PATH}"
WORKDIR "${BUILDER_ROOT}"
COPY "./${FILE_STRING}.conf" ".${APP_PATH}/conf/"
COPY ./root/ ./
RUN echo "APP_PATH=${APP_PATH}" >> "${BUILDER_ROOT}/etc/contenv_extra" \
&& echo "FILE_STRING=${FILE_STRING}" >> "${BUILDER_ROOT}/etc/contenv_extra" \
&& echo "DMU_API_BACKEND=${API_BACKEND}" >> "${BUILDER_ROOT}/etc/contenv_extra"
## build the final image
#
FROM "${FROM_IMAGE}" AS standalone
ARG BUILDER_ROOT
COPY --from=builder "${BUILDER_ROOT}/" /
HEALTHCHECK --start-period=10s --timeout=10s CMD /healthcheck.sh