From a18b2a180be7c50e5cfec6c6cb44e2a171605630 Mon Sep 17 00:00:00 2001 From: Nathan Woodburn Date: Mon, 23 Mar 2026 22:42:45 +1100 Subject: [PATCH] feat: Shrink docker image --- .dockerignore | 18 ++++++++++++++++++ Dockerfile | 31 +++++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..eb291ef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,18 @@ +# Ignore text files +*.txt +*.md +LICENSE + +# UV/Python virtual env files +.venv/ +.python-version + +# Git +.git/ +.gitignore +.gitea/ +.pre-commit-config.yaml + +# Docker build files +Dockerfile +.dockerignore diff --git a/Dockerfile b/Dockerfile index 25c32e3..ba9777b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,17 +1,32 @@ -FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder +### Build stage ### +FROM python:3.13-alpine AS build +COPY --from=ghcr.io/astral-sh/uv:0.8.21 /uv /uvx /bin/ +ENV UV_PROJECT_ENVIRONMENT=/app/.venv WORKDIR /app +RUN --mount=type=cache,target=/root/.cache/uv \ + --mount=type=bind,source=uv.lock,target=uv.lock \ + --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ + uv sync --frozen --no-dev --no-install-workspace -COPY requirements.txt /app -RUN --mount=type=cache,target=/root/.cache/pip \ - pip3 install -r requirements.txt +### Runtime stage ### +FROM python:3.13-alpine AS runtime +ENV PATH="/app/.venv/bin:$PATH" +# Install curl for healthchecks +RUN apk add --no-cache curl +WORKDIR /app + +# Copy the virtual environment from build stage +COPY --from=build /app/.venv /app/.venv + +# Copy all top-level Python files COPY . /app -# Add mount point for data volume +# Optional mount for data +ENV BASE_DIR=/mnt VOLUME /mnt -ENTRYPOINT ["python3"] -CMD ["main.py"] +EXPOSE 5000 -FROM builder as dev-envs \ No newline at end of file +ENTRYPOINT ["python3", "main.py"]