From 621919a9548cab4a83436ccc25ed502bf780fcf8 Mon Sep 17 00:00:00 2001 From: Jim Clark Date: Thu, 19 Dec 2024 17:13:21 -0800 Subject: [PATCH] Switch to uv-less final stages --- src/git/Dockerfile | 19 +++++++++++++------ src/sentry/Dockerfile | 16 ++++++++++++---- src/sqlite/Dockerfile | 16 ++++++++++++---- src/time/Dockerfile | 15 +++++++++++---- 4 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/git/Dockerfile b/src/git/Dockerfile index 264962ed..2746d634 100644 --- a/src/git/Dockerfile +++ b/src/git/Dockerfile @@ -1,5 +1,5 @@ # Use a Python image with uv pre-installed -FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv # Install the project into `/app` WORKDIR /app @@ -10,22 +10,29 @@ ENV UV_COMPILE_BYTECODE=1 # Copy from the cache instead of linking since it's a mounted volume ENV UV_LINK_MODE=copy -RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* - # Install the project's dependencies using the lockfile and settings 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-install-project --no-dev + uv sync --frozen --no-install-project --no-dev --no-editable # Then, add the rest of the project source code and install it # Installing separately from its dependencies allows optimal layer caching ADD . /app RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --frozen --no-dev + uv sync --frozen --no-dev --no-editable + +FROM python:3.12-slim-bookworm + +RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv --chown=app:app /app/.venv /app/.venv # Place executables in the environment at the front of the path ENV PATH="/app/.venv/bin:$PATH" # when running the container, add --db-path and a bind mount to the host's db file -ENTRYPOINT ["uv" , "run" , "--directory", ".", "mcp-server-git"] +ENTRYPOINT ["mcp-server-git"] diff --git a/src/sentry/Dockerfile b/src/sentry/Dockerfile index 5cd6f220..a706a15e 100644 --- a/src/sentry/Dockerfile +++ b/src/sentry/Dockerfile @@ -1,5 +1,5 @@ # Use a Python image with uv pre-installed -FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv # Install the project into `/app` WORKDIR /app @@ -14,16 +14,24 @@ ENV UV_LINK_MODE=copy 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-install-project --no-dev + uv sync --frozen --no-install-project --no-dev --no-editable # Then, add the rest of the project source code and install it # Installing separately from its dependencies allows optimal layer caching ADD . /app RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --frozen --no-dev + uv sync --frozen --no-dev --no-editable + +FROM python:3.12-slim-bookworm + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv --chown=app:app /app/.venv /app/.venv # Place executables in the environment at the front of the path ENV PATH="/app/.venv/bin:$PATH" # when running the container, add --db-path and a bind mount to the host's db file -ENTRYPOINT ["uv" , "run" , "--directory", ".", "mcp-server-sentry"] +ENTRYPOINT ["mcp-server-sentry"] + diff --git a/src/sqlite/Dockerfile b/src/sqlite/Dockerfile index 8189a3d6..2edc34b0 100644 --- a/src/sqlite/Dockerfile +++ b/src/sqlite/Dockerfile @@ -1,5 +1,5 @@ # Use a Python image with uv pre-installed -FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv # Install the project into `/app` WORKDIR /app @@ -14,16 +14,24 @@ ENV UV_LINK_MODE=copy 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-install-project --no-dev + uv sync --frozen --no-install-project --no-dev --no-editable # Then, add the rest of the project source code and install it # Installing separately from its dependencies allows optimal layer caching ADD . /app RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --frozen --no-dev + uv sync --frozen --no-dev --no-editable + +FROM python:3.12-slim-bookworm + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv --chown=app:app /app/.venv /app/.venv # Place executables in the environment at the front of the path ENV PATH="/app/.venv/bin:$PATH" # when running the container, add --db-path and a bind mount to the host's db file -ENTRYPOINT ["uv" , "run" , "--directory", ".", "mcp-server-sqlite"] +ENTRYPOINT ["mcp-server-sqlite"] + diff --git a/src/time/Dockerfile b/src/time/Dockerfile index b45b389d..bd62ea84 100644 --- a/src/time/Dockerfile +++ b/src/time/Dockerfile @@ -1,5 +1,5 @@ # Use a Python image with uv pre-installed -FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim +FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv # Install the project into `/app` WORKDIR /app @@ -14,16 +14,23 @@ ENV UV_LINK_MODE=copy 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-install-project --no-dev + uv sync --frozen --no-install-project --no-dev --no-editable # Then, add the rest of the project source code and install it # Installing separately from its dependencies allows optimal layer caching ADD . /app RUN --mount=type=cache,target=/root/.cache/uv \ - uv sync --frozen --no-dev + uv sync --frozen --no-dev --no-editable + +FROM python:3.12-slim-bookworm + +WORKDIR /app + +COPY --from=uv /root/.local /root/.local +COPY --from=uv --chown=app:app /app/.venv /app/.venv # Place executables in the environment at the front of the path ENV PATH="/app/.venv/bin:$PATH" # when running the container, add --db-path and a bind mount to the host's db file -ENTRYPOINT ["uv" , "run" , "--directory", ".", "mcp-server-time"] +ENTRYPOINT ["mcp-server-time"]