Open7

uvの公式Dockefileを読む

rtanakartanaka
# 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

RUN コマンドの最初に--mountを置くと、ビルド時にマウントを動かせる。
一行目はビルドキャッシュのマウント、2行目はuv.lockファイルのマウント、3行目はpyproject.tomlのマウント
4行目はuv sync
--frozenはlockファイルをアップデートしない
--no-install-projectはプロジェクトファイルをインストールしない
--no-devはdev dependenciesをインストールしない

rtanakartanaka
# 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

projectファイルを追加する。
projectファイルをインストールする。
レイヤー分けのため依存ライブラリと分けてインストールする。

rtanakartanaka
# Place executables in the environment at the front of the path
ENV PATH="/app/.venv/bin:$PATH"

インストールした依存をPATHの最初に追加する。

# Reset the entrypoint, don't invoke `uv`
ENTRYPOINT []

ENTRYPOINTを抹消する

# Run the FastAPI application by default
# Uses `fastapi dev` to enable hot-reloading when the `watch` sync occurs
# Uses `--host 0.0.0.0` to allow access from outside the container
CMD ["fastapi", "dev", "--host", "0.0.0.0", "src/uv_docker_example"]

fastapiを起動