提升你的容器技能:统一的 Quadlet 管理现在已原生集成到 Podman 中

使用 Podman 在 Linux 上管理容器刚刚有了一个新功能。如果你曾经觉得在运行简单的 podman run 命令和处理像 Kubernetes 这样复杂的编排平台之间左右为难,那么你将迎来一个惊喜。最新版本的 Podman 通过新的 podman quadlet 命令套件,将 Quadlet 管理直接集成到其核心中,为开发人员和系统管理员创建了一个无缝且强大的工作流程。

尽管 Quadlets 作为声明式容器管理的强大工具已经存在了一段时间,但这项新集成使其比以往任何时候都更易于访问和统一。让我们深入探讨这对你意味着什么。

那么,Quadlets 到底是什么?

将 Quadlets 想象成你的容器的“食谱”,以声明式风格编写,系统——标准的 Linux 初始化系统——可以理解和管理它们。它们为容器编排提供了一个完美的中间地带。

有了 Quadlets,你可以:

  • 以声明方式定义容器设置,使用简单的 .container, .pod, .volume, 或 .network 文件
  • 利用 systemd 强大的进程管理 实现自动启动、重启和生命周期控制。
  • 实现与主机操作系统日志和服务管理的深度集成
  • 简化部署,无需完整编排平台的开销。

集成的 podman quadlet 命令套件

以前,使用 Quadlet 需要手动放置文件并直接与 systemd 交互。现在,这一切都统一在你已经熟悉和喜爱的 podman 命令之下。这种集成提供了一套全面的子命令来处理整个 Quadlet 生命周期。

主要子命令

podman quadlet install

从本地路径、目录甚至直接从 URL 安装 Quadlet 文件。

# Install from a local file
podman quadlet install /path/to/myapp.container

# Install from a URL on GitHub
podman quadlet install https://github.com/example/app/raw/main/app.container

# Install an entire application directory
podman quadlet install /path/to/app-directory/

podman quadlet list

通过强大的过滤和格式化选项,清晰地概览所有已安装的 Quadlets。

# List all installed Quadlets
podman quadlet list

# Filter by a name pattern
podman quadlet list --filter name=web*

# Customize the output format
podman quadlet list --format '{{.Name}}\t{{.Status}}'

# Get JSON output for easy scripting
podman quadlet list --format json

podman quadlet print

需要检查已安装 Quadlet 的配置?此命令将显示其内容。

podman quadlet print myapp.container

podman quadlet rm

使用灵活且安全的选项干净地移除 Quadlets。

# Remove a specific Quadlet
podman quadlet rm myapp.container

# Nuke them all
podman quadlet rm --all

# Remove a file but don't error if it's already gone
podman quadlet rm --ignore non-existent.container

你一定会喜欢的颠覆性功能

这项集成不仅仅是为了方便;它引入了一些真正具有革命性的功能。

* 基于 URL 的安装: 轻松共享和分发容器配置。只需将 podman quadlet install 指向一个 URL,即可开始使用。

* 应用程序分组当你从单个目录安装多个 Quadlet 时,Podman 会将它们视为一个有凝聚力的应用程序。如果你删除其中一个组件,整个应用程序将干净地卸载,防止出现孤立的容器或卷。

* 自动 Systemd 集成:--reload-systemd 选项默认开启,这意味着 systemd 会自动感知你所做的任何更改。一旦你安装了服务,它们就可以立即启动。

* 过滤: 通过基于名称、状态或其他条件过滤 Quadlet 列表,轻松管理大规模部署。

* 灵活的输出格式化:通过支持 JSON 和 Go 模板,你可以将 Quadlet 管理无缝集成到你的自动化脚本和 CI/CD 管道中。

整合所有功能:一个真实世界的例子

让我们看看使用这个新工作流程管理一个简单的 Web 应用程序是多么容易。

# 1. Install a web application directly from its Git repository
podman quadlet install https://raw.githubusercontent.com/example/webapp/main/app.container

# 2. List installed Quadlets to verify it's there
podman quadlet list

# 3. Check the configuration details
podman quadlet print app.container

# 4. Start the service using standard systemd commands
systemctl --user start app.service

# 5. When you're done, remove it cleanly
podman quadlet rm app.container

这对用户有什么好处?

将 Quadlet 管理直接集成到 Podman 中是系统化和易于访问的容器管理迈出的重要一步。它通过提供以下功能弥补了差距:

  1. 统一的工作流程: 不再需要上下文切换。你所需的一切都在 podman 命令下。
  2. 简化的部署: 无需记住复杂的 podman run 标志。在 Quadlet 文件中定义一次,即可随处重用。
  3. 对版本控制友好: 由于 Quadlets 只是文本文件,你可以在 Git 中跟踪它们,审查更改,并与你的团队协作。
  4. 原生系统集成: 开箱即用,获得 systemd 的所有优势——日志记录、监控和强大的服务管理。
  5. 可扩展的管理: 将相关的容器分组为单个应用程序使微服务管理变得轻而易举。
  6. 更低的学习曲线: 如果你了解 Podman,可以立即采用 Quadlets,而无需学习全新的工具链。

几分钟内即可上手

准备好尝试了吗?请确保你已安装最新版本的 Podman。然后,创建你的第一个 Quadlet 文件。

将以下内容保存为 web.container 在一个 TOML 文件中

[Container]
Image=docker.io/library/nginx:alpine
Exec=nginx -g "daemon off;"
PublishPort=8080:80

[Service]
Restart=always

[Install]
WantedBy=default.target

现在,安装并运行它

podman quadlet install web.container
systemctl --user start web.service

就是这样!你现在有一个 Nginx 容器作为 systemd 服务运行。

将 Quadlet 管理集成到 podman 命令中,使得声明式容器功能比以往任何时候都更易于访问和直观。它是 Linux 上现代容器工作负载的简单性与强大功能的完美结合。

接下来是什么?

Quadlet 和新的 podman quadlet 命令也正在开发令人兴奋的新功能。我们的目标是在 Quadlet 中增加对远程 Podman 客户端的支持,这将允许将 Quadlet 集成到 Podman Desktop 中;在不久的将来,一个重点领域是改进文档,使用户更容易理解和有效地利用 Quadlet。最后,Quadlet 也在不断改进中,你可以在 Podman 5.7 及更高版本中期待这些新功能和其他更改!

准备好深入了解了吗?请查看 官方 Podman 文档以获取更多详细信息和高级示例。

特别感谢我的同事 Matthew Heon 的宝贵贡献并共同撰写了这篇博文。

作者:Aditya R , Matthew Heon

“提升你的容器游戏水平:Podman 现已原生集成统一 Quadlet 管理”的 4 条回复

  1. Viktor Ransmayr Avatar

    “””最后,Quadlets 正在持续改进中,您可以期待 Podman 5.7 及更高版本中的这些新功能和其他更改!”””

    仅在 5.7 版本开始 — 还是 — 已经在 5.6 版本中?

    1. Aditya Avatar

      你好 Viktor,以下功能在 5.6 版本中也可用。

  2. Lima Avatar

    这是一个很棒的新功能!好消息!

    我作为一名随机的 Podman 用户有一些评论
    – 是否计划与 Podman Pods 进行集成?如果能够以简单的方式安装 Pod 及其所有容器,那就太好了。
    – 为了与现有 systemd 逻辑保持一致,是否可以考虑使用 ‘podman quadlet cat’ 作为 ‘podman quadlet print’ 的替代方案?

    谢谢!

    1. Aditya Avatar

      你好 Lima,

      1) 你也可以部署 .kube 文件,因此 Pods 也受支持。
      2) podman quadlet cat 是个好主意,你能否在 https://github.com/containers/podman 上创建一个 issue,以便我们可以在那里讨论?

回复 Aditya取消回复

订阅

输入您的电子邮件地址以接收来自本网站的电子邮件更新。

返回

您的消息已发送

警告
警告
警告。

分类


搜索