diff --git a/Containerfile b/Containerfile index 98fec19..358efe2 100644 --- a/Containerfile +++ b/Containerfile @@ -2,58 +2,73 @@ FROM lsiobase/alpine:3.17 as base WORKDIR /usr/src/app -COPY --chown=abc:abc . . + + +COPY --chown=abc:abc ./requirements.txt ./requirements.txt # based on https://github.com/linuxserver/docker-pyload-ng/blob/main/Dockerfile -# Everything is run in one command so we can purge all build dependencies and cache in the same layer after maloja is installed -# -# -- it may be possible to decrease image size slightly by using build stage and copying all site-packages to runtime stage -# but the image is already pretty small (117mb uncompressed, ~40mb compressed) +# everything but the app installation is run in one command so we can purge +# all build dependencies and cache in the same layer +# it may be possible to decrease image size slightly by using build stage and +# copying all site-packages to runtime stage but the image is already pretty small RUN \ - echo "**** install build packages ****" && \ + echo "**** install build packages ****" && \ apk add --no-cache --virtual=build-deps \ - gcc \ - g++ \ - python3-dev \ - libxml2-dev \ - libxslt-dev \ - libffi-dev \ - libc-dev \ - py3-pip \ - linux-headers && \ + gcc \ + g++ \ + python3-dev \ + libxml2-dev \ + libxslt-dev \ + libffi-dev \ + libc-dev \ + py3-pip \ + linux-headers && \ echo "**** install runtime packages ****" && \ apk add --no-cache \ - python3 \ - py3-lxml \ - tzdata && \ + python3 \ + py3-lxml \ + tzdata && \ echo "**** install pip dependencies ****" && \ python3 -m ensurepip && \ - pip3 install -U --no-cache-dir \ - pip \ - wheel && \ - echo "**** install maloja requirements ****" && \ - pip3 install --no-cache-dir -r requirements.txt && \ - echo "**** install maloja ****" && \ - pip3 install /usr/src/app && \ - echo "**** cleanup ****" && \ - apk del --purge \ - build-deps && \ - rm -rf \ - /tmp/* \ - ${HOME}/.cache + pip3 install -U --no-cache-dir \ + pip \ + wheel && \ + echo "**** install maloja requirements ****" && \ + pip3 install --no-cache-dir -r requirements.txt && \ + echo "**** cleanup ****" && \ + apk del --purge \ + build-deps && \ + rm -rf \ + /tmp/* \ + ${HOME}/.cache + +# actual installation in extra layer so we can cache the stuff above + +COPY --chown=abc:abc . . + +RUN \ + echo "**** install maloja ****" && \ + apk add --no-cache --virtual=install-deps \ + py3-pip && \ + pip3 install /usr/src/app && \ + apk del --purge \ + install-deps && \ + rm -rf \ + /tmp/* \ + ${HOME}/.cache + + COPY container/root/ / -# Docker-specific configuration -# defaulting to IPv4 is no longer necessary (default host is dual stack) -ENV MALOJA_SKIP_SETUP=yes -ENV PYTHONUNBUFFERED=1 - -# Prevents breaking change for previous container that ran maloja as root -# which meant MALOJA_DATA_DIRECTORY was created by and owned by root (UID 0) -# -# On linux hosts (non-podman rootless) these variables should be set to the host user that should own the host folder bound to MALOJA_DATA_DIRECTORY -ENV PUID=0 -ENV PGID=0 +ENV \ + # Docker-specific configuration + MALOJA_SKIP_SETUP=yes \ + PYTHONUNBUFFERED=1 \ + # Prevents breaking change for previous container that ran maloja as root + # On linux hosts (non-podman rootless) these variables should be set to the + # host user that should own the host folder bound to MALOJA_DATA_DIRECTORY + PUID=0 \ + PGID=0 EXPOSE 42010