跳转到主要内容

帮助从PDM项目生成Docker镜像

项目描述

pdm-dockerize

CI pre-commit.ci status PyPI PyPI - License

帮助从PDM项目生成Docker镜像。

安装

安装 pdm-dockerize

使用 pipx

如果您使用 pipx 安装了 pdm 并希望所有项目都有命令

pipx inject pdm pdm-dockerize

使用 pip

如果您手动使用 pip 安装了 pdm,只需在同一环境中安装额外的依赖项即可

pip install pdm-dockerize

使用 pdm

您也可以将其作为标准的 pdm 插件安装。

全局安装

pdm self add pdm-dockerize

在项目本地安装

[tool.pdm]
plugins = [
    "pdm-dockerize",
]

然后

pdm install --plugins

用法

只需在多阶段构建中使用 pdm dockerize

# syntax=docker/dockerfile:1
ARG PY_VERSION=3.11

##
# Build stage: build and install dependencies
##
FROM python:${PY_VERSION} AS builder

ARG VERSION=0.dev
ENV PDM_BUILD_SCM_VERSION=${VERSION}

WORKDIR /project

# install PDM
RUN pip install -U pip setuptools wheel
RUN pip install pdm pdm-dockerize

RUN --mount=type=bind,source=pyproject.toml,target=pyproject.toml \
    --mount=type=bind,source=pdm.lock,target=pdm.lock \
    --mount=type=cache,target=$HOME/.cache,uid=$UUID \
    pdm dockerize --prod -v

##
# Run stage: create the final runtime container
##
FROM python:${PY_VERSION} AS runtime

WORKDIR /app

# Fetch built dependencies
COPY --from=builder /project/dist/docker /app
# Copy needed files from your project (filter using `.dockerignore`)
COPY  . /app

ENTRYPOINT ["/app/entrypoint"]
CMD ["your-default-command"]

选择脚本

默认情况下,dockerize 命令会渲染一个没有任何命令的脚本,因为它默认不选择任何脚本。

您可以使用 tool.pdm.dockerize 部分的 includeexclude 属性来选择脚本。这些属性是可选的,可以是字符串或字符串列表。每个字符串都是一个 fnmatch 过滤模式

Dockerize 首先根据包含模式选择脚本,然后过滤掉与任何排除模式匹配的脚本。

包含所有脚本

[tool.pdm.dockerize]
include = "*"

包含一些特定脚本

[tool.pdm.dockerize]
include = ["my-script", "my-other-script"]

包含所有脚本,排除所有匹配 prefix-* 的脚本

[tool.pdm.dockerize]
include = "*"
exclude = "prefix-*"

包含所有匹配前缀但两个的脚本

[tool.pdm.dockerize]
include = "prefix-*"
exclude = ["prefix-not-you", "prefix-you-neither"]

选择二进制文件

默认情况下,dockerize 命令不会复制您依赖项提供的任何 Python 可执行文件。您可以使用 tool.pdm.dockerize.include_binstool.pdm.dockerize.exclude_bins 属性来选择二进制文件。语法和行为与脚本选择中的 include/exclude 完全相同。

包含所有 Python 可执行文件

[tool.pdm.dockerize]
include_bins = "*"

包含一些特定可执行文件

通常情况下,您将看到这样的

[tool.pdm.dockerize]
include = ["uvicorn"]

控制环境

pdm-dockerize 尊重已定义的环境变量

  • 脚本 env 变量设置正确
  • 共享 _.env 变量设置正确
  • 脚本 env_file 被正确加载
  • 共享 _.env_file 被正确加载

此外,您可以使用 tool.pdm.dockerize.env 表或一些仅限 Docker 的 .env 文件使用 tool.pdm.dockerize.env_file 来定义一些仅限 Docker 的环境变量。

定义仅限 Docker 的环境变量

这些环境变量仅在 Docker 入口点中有效。

[tool.pdm.dockerize.env]
VAR = "value"

加载仅限 Docker 的环境文件

此文件仅在 Docker 入口点中加载。

[tool.pdm.dockerize]
env_file = "docker.env"

内部结构

此插件通过通过子类化一些 pdm.installers 类来提供重用安装过程

  • DockerizeInstallManager,一个 pdm InstallManager,用于过滤二进制文件
  • DockerizeSynchronizer,一个 pdm Synchronizer,使用 DockerizeInstallManager 作为 InstallManager
  • FilteringDestination,一个 pdm InstallDestination,用于过滤二进制文件

这样,dockerization 就使用与安装过程相同的流程,仅为 Docker 进行调整,并增加 pdm-dockerize 的特定功能。

贡献

阅读 专门的贡献指南

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分布

pdm_dockerize-0.6.0.tar.gz (16.4 kB 查看散列)

上传

构建分布

pdm_dockerize-0.6.0-py3-none-any.whl (10.7 kB 查看散列)

上传 Python 3