From 3856cd447bc1d5bbeb5655fa3ab44748a97f5860 Mon Sep 17 00:00:00 2001 From: Yohan Boniface Date: Mon, 5 Jun 2023 15:44:32 +0200 Subject: [PATCH] Use layers to build Docker image Better cache and lighter image, yay. --- Dockerfile | 82 +++++++++++++++++++++++--------------------- docker/entrypoint.sh | 2 ++ docker/uwsgi.ini | 1 + 3 files changed, 46 insertions(+), 39 deletions(-) diff --git a/Dockerfile b/Dockerfile index 883663fb..c8ccd9aa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,56 +8,60 @@ RUN npm install RUN npm run vendors -FROM python:3.11-slim - -ENV PYTHONUNBUFFERED=1 \ - PORT=8000 - -RUN mkdir -p /srv/umap/uploads - -COPY . /srv/umap - -COPY --from=vendors /srv/umap/umap/static/umap/vendors /srv/umap/umap/static/umap/vendors - -WORKDIR /srv/umap +FROM python:3.11-slim as common RUN apt-get update && \ apt-get install -y --no-install-recommends \ tini \ uwsgi \ - libpq-dev \ - build-essential \ - binutils \ - gdal-bin \ - libproj-dev \ - curl \ - git \ - gettext \ sqlite3 \ - libffi-dev \ - libtiff5-dev \ - libjpeg62-turbo-dev \ - zlib1g-dev \ - libfreetype6-dev \ - liblcms2-dev \ - libwebp-dev \ - && \ - pip install .[docker] && \ - apt-get remove -y \ - binutils \ - libproj-dev \ - libffi-dev \ - libtiff5-dev \ - libjpeg62-turbo-dev \ - zlib1g-dev \ - libfreetype6-dev \ - liblcms2-dev \ - libwebp-dev \ + libpq-dev \ + gdal-bin \ && \ apt-get autoremove -y && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* +FROM common as build + +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + binutils \ + libproj-dev \ + curl \ + git \ + gettext \ + python3-venv \ + libffi-dev \ + libtiff5-dev \ + libjpeg62-turbo-dev \ + zlib1g-dev \ + libfreetype6-dev \ + liblcms2-dev \ + libwebp-dev + +RUN python -m venv /venv + +WORKDIR /srv/umap + +COPY . /srv/umap + +RUN /venv/bin/pip install .[docker] + +FROM common + +COPY --from=build /srv/umap/docker/ /srv/umap/docker/ +COPY --from=build /venv/ /venv/ +COPY --from=vendors /srv/umap/umap/static/umap/vendors /srv/umap/umap/static/umap/vendors + +WORKDIR /srv/umap + +RUN mkdir -p /srv/umap/uploads + +ENV PYTHONUNBUFFERED=1 \ + PORT=8000 + EXPOSE 8000 ENTRYPOINT ["/usr/bin/tini", "--"] diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 704509f4..bf6c5165 100755 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -eo pipefail +source /venv/bin/activate + # default variables : "${SLEEP:=1}" : "${TRIES:=60}" diff --git a/docker/uwsgi.ini b/docker/uwsgi.ini index 2cf2c279..2239f863 100644 --- a/docker/uwsgi.ini +++ b/docker/uwsgi.ini @@ -1,5 +1,6 @@ [uwsgi] http = :$(PORT) +home = /venv module = umap.wsgi:application master = True vacuum = True