Post

Python UV Dockerfile 构建指

Python UV Dockerfile 构建指

在 Docker 中使用 uv 可以高效管理 Python 项目的依赖与环境,并通过多阶段构建优化镜像体积与构建速度。

0x01 方法一:基于官方 uv 镜像

步骤:

选择基础镜像

可用 ghcr.io/astral-sh/uv:python3.12-bookworm 等镜像,已预装 uv 与对应 Python 版本。

复制项目文件

1
2
3
4
5
FROM ghcr.io/astral-sh/uv:python3.12-bookworm
ADD . /app
WORKDIR /app
RUN uv sync --locked
CMD ["uv", "run", "my_app"]

优化 在 .dockerignore 中添加 .venv,避免本地虚拟环境被打包进镜像。

0x02 方法二:基于 Python 官方镜像安装 uv

步骤:

安装 uv 二进制文件

1
2
FROM python:3.12-slim-bookworm
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/

安装依赖与项目

1
2
3
4
ADD . /app
WORKDIR /app
RUN uv sync --locked
CMD ["uv", "run", "my_app"]

最佳实践 使用 --no-install-project 分离依赖安装层,加快构建。 指定 uv 版本或 SHA256 以保证可复现构建。

方法三:多阶段构建减少最终镜像体积

步骤:

构建阶段安装依赖

1
2
3
4
5
6
FROM python:3.12-slim AS builder
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
WORKDIR /app
RUN uv sync --locked --no-editable
ADD . /app
RUN uv sync --locked --no-editable

生产阶段仅复制虚拟环境

1
2
3
FROM python:3.12-slim
COPY --from=builder /app/.venv /app/.venv
CMD ["/app/.venv/bin/my_app"]

✅ 验证方式:构建并运行容器,确保 uv run 能正常执行项目命令。 💡 提示:结合 docker compose watch 可实现热更新开发环境。

了解详细信息:

  • uv.doczh.com
  • juejin.cn
This post is licensed under CC BY 4.0 by the author.