注意:
- 此教程位于 Oracle 提供的免费实验室环境中。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 Quadlet 在 Systemd 下运行 Podman 容器
简介
Quadlet 提供了在 Oracle Linux 中的 systemd 下运行容器的方法。您可以按照标准 Podman 命令行语法的熟悉格式定义要在 [Container]
部分下运行的容器,并利用 systemd 的 [Unit]
和 [Service]
选项的所有优势。使用 systemd 运行容器的优点是 systemd 已集成到操作系统中,因此您可以具有在系统启动时启动的容器,或者设置多容器配置之间的顺序和依赖性。
Quadlet 替换了 Podman 用于与 systemd 集成的旧方法。该方法包括创建容器、生成服务文件、移动服务文件,然后启用服务。在许多情况下,用户会花时间将这些步骤写入 Bash 脚本,然后必须维护这些脚本和生成的文件。根据用户的角度,Quadlet 简化了此任务。
目标
在本教程中,您将学习:
- 创建 .container 文件
- 启动新的容器服务
- 测试容器
- 更新容器
先决条件
-
单个 Oracle Linux 系统的最低版本
-
每个系统都应安装 Oracle Linux 并配置以下各项:
- 具有 sudo 访问权限的非 root 用户帐户
- Podman 和 cURL 软件包
- 组 v2
- 访问 Internet
部署 Oracle Linux
注:如果在您自己的租户中运行,请阅读 linux-virt-labs
GitHub 项目 README.md ,并在部署实验室环境之前完成先决条件。
-
在 Luna 桌面上打开一个终端。
-
克隆
linux-virt-labs
GitHub 项目。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
转到工作目录。
cd linux-virt-labs/ol
-
安装所需的集合。
ansible-galaxy collection install -r requirements.yml
-
部署实验室环境。
ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e use_podman=true -e update_all=true -e os_version="9"
空闲实验室环境需要额外的变量
local_python_interpreter
,该变量为在 localhost 上运行的播放设置ansible_python_interpreter
。此变量是必需的,因为环境为 Python 的 Oracle Cloud Infrastructure SDK 安装 RPM 程序包,该程序包位于 python3.6 模块下。默认部署配置使用 AMD CPU 和 Oracle Linux 8。要使用 Intel CPU 或 Oracle Linux 9,请将
-e instance_shape="VM.Standard3.Flex"
或-e os_version="9"
添加到部署命令。重要提示:等待剧本成功运行并进入暂停任务。在手册的这一阶段,Oracle Linux 的安装已完成,实例已准备就绪。记下之前的播放,该播放会打印其部署的节点的公共和专用 IP 地址以及运行实验室时所需的任何其他部署信息。
确认 Podman Works
Oracle Linux 中的 container-tools 软件包提供最新版本的 Podman、Buildah、Skopeo 以及关联的依赖项。
-
打开终端并通过 SSH 连接到 ol-node-01 实例。
ssh oracle@<ip_address_of_instance>
-
检查 Podman 的版本。
podman -v
-
确认 Podman CLI 正常工作。
podman run quay.io/podman/hello
输出示例:
[oracle@ol-server ~]$ podman run quay.io/podman/hello Trying to pull quay.io/podman/hello:latest... Getting image source signatures Copying blob f82b04e85914 done Copying config dbd85e09a1 done Writing manifest to image destination Storing signatures !... Hello Podman World ...! .--"--. / - - \ / (O) (O) \ ~~~| -=(,Y,)=- | .---. /` \ |~~ ~/ o o \~~~~.----. ~~ | =(X)= |~ / (O (O) \ ~~~~~~~ ~| =(Y_)=- | ~~~~ ~~~| U |~~ Project: https://github.com/containers/podman Website: https://podman.io Documents: https://docs.podman.io Twitter: @Podman_io
创建四人一组
Quadlet 仅是在包含描述容器启动选项的 [Container]
节的特定目录中创建 .container 文件。
-
创建用户的容器 systemd 目录。
mkdir -p ~/.config/containers/systemd
-
创建 .container 文件。
cat << EOF | tee ~/.config/containers/systemd/test-ol.container > /dev/null [Unit] Description=My First Quadlet [Container] Image=ghcr.io/oracle/oraclelinux:9 AutoUpdate=registry Exec=sleep 60 [Service] Restart=always TimeoutStartSec=900 [Install] WantedBy=multi-user.target default.target EOF
此 Quadlet 运行 Oracle Linux 容器并在容器中执行
sleep 60
。sleep 60
完成后,容器将退出,然后 systemd 重新启动它。[Container]
部分存在其他选项,上游文档中提供了列表。有关
[Service]
、[Unit]
和[Install]
选项的更多信息,请参见 systemd.unit(5) 手册页。 -
为用户启用滞留。
sudo loginctl enable-linger oracle
-
将新单元文件通知 systemd。
systemctl --user daemon-reload
此步骤基于 test-ol.container 文件创建 test-ol.service 。
-
启动服务。
systemctl --user start test-ol.service
该服务运行
podman
下载 Oracle Linux 映像,然后在容器映像中发出sleep 60
。 -
检查服务的状态。
systemctl --user status test-ol.service
重复此命令可查看容器在运行
sleep 60
后停止并重新启动。您还可以通过运行sudo journalctl _SYSTEMD_USER_UNIT=test-ol.service
检查日志。 -
更新容器。
使用
[Container]
部分中的AutoUpdate=registry
项,可以启用podman auto-update
功能来更新容器映像。但是,如果要自动而不是手动执行此操作,还必须启用所需的服务。systemctl --user enable podman-auto-update
可以手动运行
podman auto-update --dry-run
以查看是否有更新可用。因为我们几分钟前刚刚下载了最新的图像,所以没有更新,因此,没有什么可做的。但是,如果有更新,则可以删除--dry-run
选项,podman
将提取最新映像并重新启动容器。
后续步骤
本教程介绍了如何使用 systemd 利用 Quadlet 管理最小容器。通过阅读文档和创建附加容器来了解更多信息,这些容器利用存储并具有多容器依赖性。
相关链接
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Run Podman Containers Under Systemd with Quadlet
G32071-01
Copyright ©2025, Oracle and/or its affiliates.