帮助从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
,一个pdm
InstallManager
,用于过滤二进制文件DockerizeSynchronizer
,一个pdm
Synchronizer
,使用DockerizeInstallManager
作为InstallManager
FilteringDestination
,一个pdm
InstallDestination
,用于过滤二进制文件
这样,dockerization 就使用与安装过程相同的流程,仅为 Docker 进行调整,并增加 pdm-dockerize
的特定功能。
贡献
阅读 专门的贡献指南。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。