帮助从PDM项目生成Docker镜像
项目描述
pdm-dockerize
帮助从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 部分的 include 和 exclude 属性来选择脚本。这些属性是可选的,可以是字符串或字符串列表。每个字符串都是一个 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_bins 和 tool.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,一个pdmInstallManager,用于过滤二进制文件DockerizeSynchronizer,一个pdmSynchronizer,使用DockerizeInstallManager作为InstallManagerFilteringDestination,一个pdmInstallDestination,用于过滤二进制文件
这样,dockerization 就使用与安装过程相同的流程,仅为 Docker 进行调整,并增加 pdm-dockerize 的特定功能。
贡献
阅读 专门的贡献指南。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。