Skip to content

Using uv in Docker#

Running in Docker#

Dockerイメージは、利用可能なuvのビルドバージョンとともに公開されます。

container:

$ docker run ghcr.io/astral-sh/uv --help

Installing uv#

uvは公式のDockerイメージからコピーすることでインストールできます。

Dockerfile
FROM python:3.12-slim-bullseye
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv

または、スタンドアロンインストーラを使用して、次の操作を行います。:

Dockerfile
FROM python:3.12-slim-bullseye
RUN apt-get update && apt-get install -y curl --no-install-recommends
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.cargo/bin/:$PATH"

これにはcurlが必要であることに注意してください。

いずれの場合も、特定のuvバージョンに固定することをお勧めします。

Installing a package#

uvがイメージにインストールされると、いくつかのパッケージのインストールに使用できます。

コンテナはすでに分離されているため、システムPython環境ではこのコンテキストを使用しても安全です。

--systemフラグを使用して、システム環境にインストールできます。:

Dockerfile
RUN uv pip install --system ruff

システムPython環境をデフォルトで使用するには、UV_SYSTEM_PYTHON変数を設定します。:

Dockerfile
ENV UV_SYSTEM_PYTHON=1

または、仮想環境を作成してアクティブ化することもできます。:

Dockerfile
RUN uv venv /opt/venv
# Use the virtual environment automatically
ENV VIRTUAL_ENV=/opt/venv
# Place entry points in the environment at the front of the path
ENV PATH="/opt/venv/bin:$PATH"

仮想環境を使用する場合は、uv呼び出しから--systemフラグを省略する必要があります。:

Dockerfile
RUN uv pip install ruff

Installing requirements#

要件ファイルをインストールするには、それらをコンテナにコピーします。:

Dockerfile
COPY requirements.txt .
RUN uv pip install -r requirements.txt

Installing a project#

要件とともにプロジェクトをインストールする場合、ソースコードの残りの部分から要件のコピーを分離することが賢明です。これにより、(頻繁に変更されない)プロジェクトの依存関係を、(頻繁に変更される)プロジェクト自体とは別にキャッシュできます。

Dockerfile
COPY pyproject.toml .
RUN uv pip install -r pyproject.toml
COPY . .
RUN uv pip install -e .

Optimizations#

Using uv temporarily#

最終イメージでuvが必要ない場合は、各呼び出しでバイナリをマウントできます。

Dockerfile
RUN --mount=from=uv,source=/uv,target=/bin/uv \
    uv pip install --system ruff

Caching#

cache mountを使用すると、ビルド間のパフォーマンスを向上させることができます。

Dockerfile
RUN --mount=type=cache,target=/root/.cache/uv \
 ./uv pip install -r requirements.txt -->

キャッシュディレクトリの場所はuv cache dirコマンドで決定できます。

または、キャッシュを一定の場所に設定することもできます。:

Dockerfile
ENV UV_CACHE_DIR=/opt/uv-cache/

キャッシュをマウントしない場合は、--no-cacheフラグを使用してイメージのサイズを小さくすることができます。