名称¶
podman-systemd.unit - Podman Quadlet 与 systemd 集成的高层概述
描述¶
Quadlet 是一个 systemd 单元生成器,它通过使用专门的 systemd 单元文件来定义 Podman 资源,从而实现声明式容器管理。它提供了 Podman 和 systemd 之间的接口,允许用户通过原生的 systemd 服务单元来管理容器、pod、卷、镜像等。
Quadlet 会解析位于众所周知目录中的 .container
、.pod
、.volume
、.network
、.image
、.build
和 .kube
文件,并将它们转换为相应的 systemd .service
单元。然后,这些单元用于在启动时或通过显式的 systemctl
命令来创建和管理容器资源。
用途¶
Quadlet 的目标是弥合容器生命周期管理和系统初始化之间的差距。它让您能够以声明方式定义容器基础设施,并利用 systemd 的特性,例如依赖排序、重启策略、启动时激活、日志记录和 drop-in 配置。
它消除了编写复杂的 ExecStart=
行或手动管理自定义 systemd 服务的需要。
优点¶
声明式且人类可读的单元定义
与原生 systemd 特性的无缝集成
一致的命名和依赖管理
支持高级 Podman 功能(pod、kube、镜像构建)
rootless 和 rootful 兼容性
支持所有单元类型的 drop-in 覆盖
与 SYSTEMD 集成¶
在启动时,podman-system-generator
会从预定义目录中读取 Quadlet 单元文件,并将它们转换为位于 /run/systemd/generator/
下的 .service
文件。这些生成的服务被视为原生的 systemd 单元,可以使用标准工具(如 systemctl)进行启用、启动和检查。
systemctl enable my-container.service
systemctl start my-container.service
journalctl -u my-container.service
根据所使用的搜索路径,Quadlet 可以干净地与 rootless 和 rootful 的 Podman 环境集成。
文件类型¶
Quadlet 支持以下文件类型:
.container
— 定义和管理单个容器。请参阅 podman-container.unit(5)。.pod
— 创建一个可供容器加入的 Podman pod。请参阅 podman-pod.unit(5)。.volume
— 确保存在一个已命名的 Podman 卷。请参阅 podman-volume.unit(5)。.network
— 为容器和 pod 创建一个 Podman 网络。请参阅 podman-network.unit(5)。.image
— 拉取并缓存一个容器镜像。请参阅 podman-image.unit(5)。.build
— 根据 Containerfile 构建一个容器镜像。请参阅 podman-build.unit(5)。.kube
— 使用 podman-kube.unit(5) 从 Kubernetes YAML 部署容器。
每个文件都会被映射到一个对应的 .service
单元,其命名模式可预测,通常是在单元基础名称后附加 -<类型>.service
。
文件路径¶
Quadlet 文件应根据 rootless 或 rootful 执行方式存储在特定目录中。
Rootful(有根模式)¶
/run/containers/systemd/
/etc/containers/systemd/
/usr/share/containers/systemd/
Rootless(无根模式)¶
$XDG_RUNTIME_DIR/containers/systemd/
$XDG_CONFIG_HOME/containers/systemd/
或~/.config/containers/systemd/
/etc/containers/systemd/users/$(UID)
/etc/containers/systemd/users/
QUADLET 区段 [Quadlet]¶
一些 quadlet 特定的配置在不同的单元类型之间是共享的。这些设置可以在 [Quadlet]
区段中进行配置。
[Quadlet]
的有效选项如下所示:
[Quadlet] 选项 |
描述 |
---|---|
DefaultDependencies=false |
禁用对该单元的隐式网络依赖 |
DefaultDependencies=
¶
将 Quadlet 的默认网络依赖项添加到该单元(默认为 true
)。
当设置为 false 时,Quadlet 将**不会**向生成的单元添加对 network-online.target
/podman-user-wait-network-online.service
的依赖(After=, Wants=)。
请注意,此选项在 [Quadlet]
区段中设置。systemd 的 [Unit]
区段中有一个同名但含义不同的选项。
另请参阅¶
另请参阅:podman-container.unit(5)、podman-pod.unit(5)、podman-volume.unit(5)、podman-network.unit(5)、podman-image.unit(5)、podman-build.unit(5)、podman-kube.unit(5)、systemd.unit(5)