容器
Container
将 Pixi 包投入生产的一种方法是使用 Docker 或 Podman 等工具进行容器化。
我们在 pixi-docker 提供了一个简单的 Docker 镜像,其中包含在不同基础镜像之上的 Pixi 可执行文件。
镜像可在 ghcr.io/prefix-dev/pixi 获取。
有不同的标签可用于不同的基础镜像:
latest- 基于ubuntu:jammyfocal- 基于ubuntu:focalbullseye- 基于debian:bullseyenoble-cuda-12.9.1- 基于nvidia/cuda:12.9.1-base-ubuntu24.04noble-cuda-13.0.0- 基于nvidia/cuda:13.0.0-base-ubuntu24.04- ... 等等
所有标签
有关所有标签,请查看构建脚本。
Docker 与 pixi 最佳实践
@pavelzw 写了一篇关于使用 pixi 将 conda 环境运送到生产的博客文章。 如果你想了解更多关于在 Docker 中使用 pixi 的最佳实践,请查看他们的博客文章。
使用示例#
以下示例使用 Pixi Docker 镜像作为多阶段构建的基础镜像。
它还利用了 pixi shell-hook,以不依赖在生产容器中安装 Pixi。
更多示例
更多示例请查看 pavelzw/pixi-docker-example。
FROM ghcr.io/prefix-dev/pixi:0.41.4 AS build
# 将源代码、pixi.toml 和 pixi.lock 复制到容器
WORKDIR /app
COPY . .
# 安装依赖到 `/app/.pixi/envs/prod`
# 使用 `--locked` 确保 lockfile 与 pixi.toml 保持同步
RUN pixi install --locked -e prod
# 创建 shell-hook bash 脚本来激活环境
RUN pixi shell-hook -e prod -s bash > /shell-hook
RUN echo "#!/bin/bash" > /app/entrypoint.sh
RUN cat /shell-hook >> /app/entrypoint.sh
# 扩展 shell-hook 脚本以运行传递给容器的命令
RUN echo 'exec "$@"' >> /app/entrypoint.sh
FROM ubuntu:24.04 AS production
WORKDIR /app
# 只将生产环境复制到 prod 容器
# 请注意,"prefix"(路径)需要与构建容器中的相同
COPY --from=build /app/.pixi/envs/prod /app/.pixi/envs/prod
COPY --from=build --chmod=0755 /app/entrypoint.sh /app/entrypoint.sh
# 将你的项目代码也复制到容器
COPY ./my_project /app/my_project
EXPOSE 8000
ENTRYPOINT [ "/app/entrypoint.sh" ]
# 在 pixi 环境中运行你的应用
CMD [ "uvicorn", "my_project:app", "--host", "0.0.0.0" ]