From e5e4bda66a7847e27398858f7f38cccfd9916d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rn-Michael=20Miehe?= Date: Fri, 20 Feb 2026 00:28:48 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20final=20image=20now=20uses=20dhi=20?= =?UTF-8?q?base=20image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 55 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9f9219d..aa06f73 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ARG NODE_VERSION=24 -ARG PYTHON_VERSION=3.14-slim +ARG PYTHON_VERSION=3.14 ############ # build ui # @@ -28,30 +28,33 @@ RUN set -ex; \ # exclude webpack-bundle-analyzer output rm -f /tmp/advent22_ui/report.html; -############ -# main app # -############ + +############### +# install app # +############### ARG PYTHON_VERSION -FROM python:${PYTHON_VERSION} AS production +FROM dhi.io/python:${PYTHON_VERSION}-dev AS install-app -# env setup for uv -ENV \ - PATH="/opt/advent22/api/.venv/bin:$PATH" \ +# env setup +WORKDIR /opt/advent22 +ENV UV_WORKING_DIR="api/" \ UV_COMPILE_BYTECODE=1 \ UV_NO_DEV=1 \ UV_LINK_MODE="copy" -EXPOSE 8000 - -# install advent22_api deps -WORKDIR /opt/advent22/api - RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \ --mount=type=cache,target=/root/.cache/uv \ - --mount=type=bind,source=api/uv.lock,target=uv.lock \ - --mount=type=bind,source=api/pyproject.toml,target=pyproject.toml \ + --mount=type=bind,source=api/uv.lock,target=api/uv.lock \ + --mount=type=bind,source=api/pyproject.toml,target=api/pyproject.toml \ + set -ex; \ \ + # prepare data directory + mkdir data; \ + chown nobody:nobody data; \ + chmod u=rwx,g=rx,o=rx data; \ + \ + # install advent22_api deps uv sync \ --locked \ --no-install-project \ @@ -59,7 +62,7 @@ RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \ ; # install advent22_api -COPY api ./ +COPY api api/ RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \ --mount=type=cache,target=/root/.cache/uv \ \ @@ -68,15 +71,27 @@ RUN --mount=from=ghcr.io/astral-sh/uv,source=/uv,target=/bin/uv \ --no-editable \ ; +# add prepared advent22_ui +COPY --from=build-ui /tmp/advent22_ui ui/ + + +#################### +# production image # +#################### + +ARG PYTHON_VERSION +FROM dhi.io/python:${PYTHON_VERSION} AS production + +ENV PATH="/opt/advent22/api/.venv/bin:$PATH" +EXPOSE 8000 CMD [ "advent22" ] -# add prepared advent22_ui -COPY --from=build-ui /tmp/advent22_ui /opt/advent22/ui +ARG PYTHON_VERSION +COPY --from=install-app /opt/python/lib/python${PYTHON_VERSION} /opt/python/lib/python${PYTHON_VERSION}/ +COPY --from=install-app /opt/advent22 /opt/advent22/ -# prepare data directory WORKDIR /opt/advent22/data VOLUME [ "/opt/advent22/data" ] -RUN chown -R nobody:nogroup ./ # run as unprivileged user USER nobody