QualetManager — 全栈容器编排管理平台 QualetManager — 全栈容器编排管理平台

QualetManager — 全栈容器编排管理平台

Podman 比 Docker 省内存、更安全,但它没有守护进程。这意味着容器跑完就没了,想开机自启得手写 Quadlet 配置文件。而市面上的管理面板——Portainer 不兼容 Podman,Cockpit 功能太弱。

所以我写了 QualetManager。

为什么 Podman 在家用场景更合适

Docker 的 dockerd 守护进程常驻内存,空载占 30-50MB。Podman 没有后台进程,容器退出后资源直接回收。4GB 内存的小主机,这几十 MB 是实打实的优势。

Rootless 也是刚需。Docker 默认 root 权限,容器逃逸就是宿主机沦陷。Podman 以普通用户身份跑容器,攻击面小得多。

没有守护进程的代价

Docker 的工作流很成熟:docker-compose.yml 写好,docker compose up -d,加个 systemd service 文件开机自启,完事。

Podman 不一样。podman run 跑起来的容器,机器一重启就没了。没有守护进程意味着没有人在后台帮你管容器。

Red Hat 的态度很明确:Compose 是 Docker 的遗产,Quadlet 才是未来。

Quadlet 是什么

Quadlet 的思路很直接:既然 systemd 已经是 init 系统,容器编排为什么要另起炉灶?

把容器定义写成 .container.volume.network 这类 unit 文件,放在 ~/.config/containers/systemd/ 下,systemctl daemon-reload,systemd 自己拉起容器。

好处是原生集成:日志走 journald,资源限制走 cgroup v2,开机自启走 systemd。

坏处是写起来繁琐。一个简单的 Nginx 容器:

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=html.volume:/usr/share/nginx/html:ro
Network=frontend.network
[Service]
Restart=always
[Install]
WantedBy=multi-user.target

这还算简洁的。一旦涉及环境变量注入、多容器依赖、健康检查,配置文件又长又难维护。

更要命的是,改完配置得 systemctl daemon-reloadrestart。没有 Docker 那种自动检测变更的便利。

管理面板的困境

Docker 生态有 Portainer,界面清爽,功能齐全。但它和 Podman 水土不服,底层 API 不兼容,装上去各种报错。

Fedora 有原生的 Cockpit,systemd 集成做得不错。问题是界面丑,功能少。想看个容器日志都得点好几层,更别说批量管理、配置编辑这些 Portainer 早就做好的功能。

没有好用的工具,那就自己写。

QualetManager 的技术实现

Go 写后端,React 写前端,编译成单个二进制。扔到服务器上就能跑,不需要 Node.js,不需要 Python,不需要 Docker。

核心功能:

Quadlet 可视化编辑:表单化配置容器、Volume、Network,不用手写 ini 文件。填完表单自动生成 Quadlet 配置,写入 ~/.config/containers/systemd/

systemd D-Bus 集成:用 godbus 库直接调 systemd 的 D-Bus 接口。daemon-reload、start、stop、status 一站式操作,不需要调用外部命令。

日志实时查看:通过 D-Bus 订阅 journald 日志流,前端 WebSocket 实时推送。不用 SSH 上去 journalctl -u xxx

容器状态监控:读取 cgroup 文件获取 CPU、内存、网络 IO 数据,前端实时展示。

为什么不用数据库

Quadlet 的配置文件本身就是数据源。直接读写 /etc/containers/systemd/ 下的文件,不需要额外的数据库。

这带来一个好处:配置文件和 systemd 原生格式一致,手动编辑也不会破坏管理面板的状态。

当前状态

项目刚起步,核心功能已经能用。管理几个 Quadlet 容器、查看日志、重启服务这些基本操作没问题。

还在做的:

  • 网络和 Volume 的可视化管理
  • 容器模板,常用配置一键生成
  • 多服务器管理

如果你也在用 Podman + Quadlet,又嫌弃 Cockpit 的话,可以试试:GitHub 仓库


← Back to projects