注意:

使用 Quadlet 在 Systemd 下运行 Podman 容器

简介

Quadlet 提供了在 Oracle Linux 中的 systemd 下运行容器的方法。您可以按照标准 Podman 命令行语法的熟悉格式定义要在 [Container] 部分下运行的容器,并利用 systemd 的 [Unit][Service] 选项的所有优势。使用 systemd 运行容器的优点是 systemd 已集成到操作系统中,因此您可以具有在系统启动时启动的容器,或者设置多容器配置之间的顺序和依赖性。

Quadlet 替换了 Podman 用于与 systemd 集成的旧方法。该方法包括创建容器、生成服务文件、移动服务文件,然后启用服务。在许多情况下,用户会花时间将这些步骤写入 Bash 脚本,然后必须维护这些脚本和生成的文件。根据用户的角度,Quadlet 简化了此任务。

目标

在本教程中,您将学习:

先决条件

部署 Oracle Linux

注:如果在您自己的租户中运行,请阅读 linux-virt-labs GitHub 项目 README.md ,并在部署实验室环境之前完成先决条件。

  1. 在 Luna 桌面上打开一个终端。

  2. 克隆 linux-virt-labs GitHub 项目。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 转到工作目录。

    cd linux-virt-labs/ol
    
  4. 安装所需的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 部署实验室环境。

    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 以及关联的依赖项。

  1. 打开终端并通过 SSH 连接到 ol-node-01 实例。

    ssh oracle@<ip_address_of_instance>
    
  2. 检查 Podman 的版本。

    podman -v
    
  3. 确认 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 文件。

  1. 创建用户的容器 systemd 目录。

    mkdir -p ~/.config/containers/systemd
    
  2. 创建 .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 60sleep 60 完成后,容器将退出,然后 systemd 重新启动它。[Container] 部分存在其他选项,上游文档中提供了列表。

    有关 [Service][Unit][Install] 选项的更多信息,请参见 systemd.unit(5) 手册页。

  3. 为用户启用滞留。

    sudo loginctl enable-linger oracle
    
  4. 将新单元文件通知 systemd。

    systemctl --user daemon-reload
    

    此步骤基于 test-ol.container 文件创建 test-ol.service

  5. 启动服务。

    systemctl --user start test-ol.service
    

    该服务运行 podman 下载 Oracle Linux 映像,然后在容器映像中发出 sleep 60

  6. 检查服务的状态。

    systemctl --user status test-ol.service
    

    重复此命令可查看容器在运行 sleep 60 后停止并重新启动。您还可以通过运行 sudo journalctl _SYSTEMD_USER_UNIT=test-ol.service 检查日志。

  7. 更新容器。

    使用 [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 帮助中心