使用 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 中是系统化和易于访问的容器管理迈出的重要一步。它通过提供以下功能弥补了差距:
- 统一的工作流程: 不再需要上下文切换。你所需的一切都在 podman 命令下。
- 简化的部署: 无需记住复杂的 podman run 标志。在 Quadlet 文件中定义一次,即可随处重用。
- 对版本控制友好: 由于 Quadlets 只是文本文件,你可以在 Git 中跟踪它们,审查更改,并与你的团队协作。
- 原生系统集成: 开箱即用,获得 systemd 的所有优势——日志记录、监控和强大的服务管理。
- 可扩展的管理: 将相关的容器分组为单个应用程序使微服务管理变得轻而易举。
- 更低的学习曲线: 如果你了解 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
回复 Aditya取消回复