Skip to content

Commit ae70ed0

Browse files
Refactor for distroless docker image
1 parent 4468b0d commit ae70ed0

File tree

2 files changed

+27
-24
lines changed

2 files changed

+27
-24
lines changed

Dockerfile

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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 \
7576
FROM 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
8183
COPY --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
8891
ARG USERNAME=appuser
@@ -91,14 +94,21 @@ ENV HOME=/home/${USERNAME}
9194
ENV 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/
101110
COPY --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
104114
ENV USERNAME=appuser
@@ -107,7 +117,7 @@ ENV HOME=/home/${USERNAME}
107117

108118
RUN echo "${USERNAME}:x:1000:${USERNAME}" >> /etc/group
109119
RUN 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
113123
COPY --chown=${USERNAME} . /app
@@ -117,10 +127,6 @@ COPY --from=builder-image /usr/local/bin/python /usr/local/bin/python
117127

118128
ENV 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`)
125131
RUN rm /bin/cat /bin/find /bin/ls /bin/rm /bin/vi /bin/which
126132

@@ -130,13 +136,10 @@ FROM distroless AS runner-image
130136

131137
ARG PYTHON_VERSION=3.10
132138
ARG 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
142145
ENV LANG C.UTF-8

startup.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#!/usr/bin/env bash
1+
#!/usr/bin/env sh
22

33
export VIRTUAL_ENV="/opt/venv"
44
export PATH="${VIRTUAL_ENV}/bin:$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH"

0 commit comments

Comments
 (0)