Created
January 10, 2025 06:32
-
-
Save slimslenderslacks/d9904303eea98f8b73fd0e4580e1f941 to your computer and use it in GitHub Desktop.
Dockerfile for a standard uv-based python project with a pyproject.toml and uv.lock in the root directory
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Use a Python image with uv pre-installed | |
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv | |
# Install the project into `/app` | |
WORKDIR /app | |
# Enable bytecode compilation | |
ENV UV_COMPILE_BYTECODE=1 | |
# Copy from the cache instead of linking since it's a mounted volume | |
ENV UV_LINK_MODE=copy | |
# 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 --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 --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" | |
# the name-of-your-app must be replaced by the value of the name key in the [project] table of your pyproject.toml | |
ENTRYPOINT ["{{name-of-your-app}}"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment