第 14 章 使用 Podman 将容器移植到 systemd
Podman (Pod Manager)是一个简单的无守护进程工具,功能齐全的容器引擎。Podman 提供了一个与 Docker-CLI 类似的命令行,可以轻松地从其他容器引擎进行转换,并能够管理 pod、容器和镜像。
最初,Podman 没有设计为提供整个 Linux 系统或管理服务,如启动顺序、依赖项检查和失败的服务恢复。systemd 负责整个系统初始化。由于红帽将容器与 systemd 集成,您可以像在 Linux 系统中管理其他服务和功能一样管理 Podman 构建的 OCI 和 Docker 格式的容器。您可以使用 systemd 初始化服务来处理 pod 和容器。
使用 systemd 单元文件,您可以:
-
设置容器或 pod 以作为
systemd服务启动。 - 定义容器化服务运行的顺序,并检查依赖项(例如,确保另一个服务正在运行、文件可用或已挂载资源)。
-
使用
systemctl命令控制systemd系统的状态。
您可以使用 systemd 单元文件生成容器和 pod 的可移植描述。
14.1. 使用 Quadlets 自动生成 systemd 单元文件 复制链接链接已复制到粘贴板!
使用 Quadlet 时,您描述了如何以与常规 systemd 单元文件非常相似的格式运行容器。容器描述侧重于相关的容器详情,隐藏在 systemd 下运行容器的技术详情。在以下一个目录中创建 <CTRNAME>.container 单元文件:
-
对于 root 用户:
/usr/share/containers/systemd/或/etc/containers/systemd/ -
对于无根用户:
$HOME/.config/containers/systemd/,$XDG_CONFIG_HOME/containers/systemd/,/etc/containers/systemd/users/$(UID)或/etc/containers/systemd/users/
Quadlet 从 Podman v4.6 开始提供。
先决条件
-
container-tools元数据包已安装。
流程
创建
mysleep.container单元文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
[Container]部分中,您必须指定:-
Image- 您要运行的容器镜像 exec- 您要在容器内运行的命令这可让您能够使用
systemd单元文件中指定的所有其他字段。
-
根据
mysleep.container文件创建mysleep.service:systemctl --user daemon-reload
$ systemctl --user daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:检查
mysleep.service的状态:systemctl --user status mysleep.service
$ systemctl --user status mysleep.service ○ mysleep.service - The sleep container Loaded: loaded (/home/username/.config/containers/systemd/mysleep.container; generated) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启动
mysleep.service:systemctl --user start mysleep.service
$ systemctl --user start mysleep.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查
mysleep.service的状态:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出所有容器:
podman ps -a
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 421c8293fc1b registry.access.redhat.com/ubi9-minimal:latest sleep 1000 30 seconds ago Up 10 seconds ago systemd-mysleepCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,创建的容器的名称由以下元素组成:
-
systemd-前缀 systemd单元的名称,即systemd-mysleep这种命名有助于将常见容器与在
systemd单元中运行的容器区分开来。它还有助于确定容器运行在哪个单元中。如果要更改容器的名称,请使用[Container]部分中的ContainerName字段。
-