@@ -19,6 +19,7 @@ RUN apt -qq update \
1919 automake \
2020 build-essential \
2121 ca-certificates \
22+ curl \
2223 gcc \
2324 libbz2-dev \
2425 libffi7 \
@@ -75,14 +76,16 @@ RUN poetry config virtualenvs.in-project true \
7576FROM gcr.io/distroless/cc AS distroless
7677
7778# arch: x86_64-linux-gnu / aarch64-linux-gnu
78- ARG CHIPSET_ARCH=x86_64-linux-gnu
79+ ARG CHIPSET_ARCH=${CHIPSET_ARCH:- x86_64-linux-gnu}
7980
8081# required by lots of packages - e.g. six, numpy, asgi, wsgi, gunicorn
82+ # libz.so.1, libexpat.so.1, libbz2.so, libffi.so.7
8183COPY --from=builder-image /etc/ld.so.cache /etc/
82- COPY --from=builder-image /lib/${CHIPSET_ARCH}/libz.so.1 /lib/${CHIPSET_ARCH}/
83- COPY --from=builder-image /lib/${CHIPSET_ARCH}/libexpat.so.1 /lib/${CHIPSET_ARCH}/
84- COPY --from=builder-image /usr/lib/${CHIPSET_ARCH}/libbz2.so /usr/lib/${CHIPSET_ARCH}/libbz2.so.1.0
85- COPY --from=builder-image /usr/lib/${CHIPSET_ARCH}/libffi.so.7 /usr/lib/${CHIPSET_ARCH}/
84+
85+ # TODO: curl-specific libs (copying whole /lib and /usr/lib adds ~50MB to image)
86+ # libcurl.so.4, libnghttp2.so.14, libidn2.so.0, librtmp.so.1, libssh2.so.1, libpsl.so.5
87+ COPY --from=builder-image /lib/${CHIPSET_ARCH}/ /lib/${CHIPSET_ARCH}/
88+ COPY --from=builder-image /usr/lib/${CHIPSET_ARCH}/ /lib/${CHIPSET_ARCH}/
8689
8790# non-root user setup
8891ARG USERNAME=appuser
@@ -91,14 +94,21 @@ ENV HOME=/home/${USERNAME}
9194ENV VENV="${HOME}/.venv"
9295
9396# import useful bins from busybox image
94- COPY --from=busybox:uclibc /bin/ls /bin/ls
95- COPY --from=busybox:uclibc /bin/rm /bin/rm
96- COPY --from=busybox:uclibc /bin/sh /bin/sh
97- COPY --from=busybox:uclibc /bin/vi /bin/vi
98- COPY --from=busybox:uclibc /bin/cat /bin/cat
99- COPY --from=busybox:uclibc /bin/find /bin/find
100- COPY --from=busybox:uclibc /bin/which /bin/which
97+ COPY --from=busybox:latest \
98+ /bin/cat \
99+ /bin/cut \
100+ /bin/date \
101+ /bin/find \
102+ /bin/ls \
103+ /bin/rm \
104+ /bin/sed \
105+ /bin/sh \
106+ /bin/uname \
107+ /bin/vi \
108+ /bin/which \
109+ /bin/
101110COPY --from=busybox:uclibc /bin/env /usr/bin/env
111+ COPY --from=builder-image /usr/bin/curl /bin/curl
102112
103113# setup standard non-root user for use downstream
104114ENV USERNAME=appuser
@@ -107,7 +117,7 @@ ENV HOME=/home/${USERNAME}
107117
108118RUN echo "${USERNAME}:x:1000:${USERNAME}" >> /etc/group
109119RUN echo "${USERNAME}:x:1001:" >> /etc/group
110- RUN echo "${USERNAME}:x:1000:1001::/home/${USERNAME }:" >> /etc/passwd
120+ RUN echo "${USERNAME}:x:1000:1001::${HOME }:" >> /etc/passwd
111121
112122# copy app and virtual environment
113123COPY --chown=${USERNAME} . /app
@@ -117,10 +127,6 @@ COPY --from=builder-image /usr/local/bin/python /usr/local/bin/python
117127
118128ENV PATH="/usr/local/bin:${HOME}/.local/bin:/bin:/usr/bin:${VENV}/bin:${VENV}/lib/python${PYTHON_VERSION}/site-packages:/usr/share/doc:$PATH"
119129
120- RUN echo "${USERNAME}:x:1000:${USERNAME}" >> /etc/group
121- RUN echo "${USERNAME}:x:1001:" >> /etc/group
122- RUN echo "${USERNAME}:x:1000:1001::/home/${USERNAME}:" >> /etc/passwd
123-
124130# remove dev bins (need sh to run `startup.sh`)
125131RUN rm /bin/cat /bin/find /bin/ls /bin/rm /bin/vi /bin/which
126132
@@ -130,13 +136,10 @@ FROM distroless AS runner-image
130136
131137ARG PYTHON_VERSION=3.10
132138ARG USERNAME=appuser
133- ENV HOME="/home/${USERNAME}"
134- ENV VENV="/opt/venv"
135-
136- ENV PATH="/usr/local/bin:${HOME}/.local/bin:/bin:/usr/bin:${VENV}/bin:${VENV}/lib/python${PYTHON_VERSION}/site-packages:$PATH"
139+ ENV HOME=/home/${USERNAME}
140+ ENV VENV="${HOME}/.venv"
137141
138- # keeps Python from generating .pyc files in the container
139- ENV PYTHONDONTWRITEBYTECODE=1
142+ ENV PATH="/usr/local/bin:${HOME}/.local/bin:/bin:/usr/bin:${VENV}/bin:${VENV}/lib/python${PYTHON_VERSION}/site-packages:/usr/share/doc:$PATH"
140143
141144# standardise on locale, don't generate .pyc, enable tracebacks on seg faults
142145ENV LANG C.UTF-8
0 commit comments