Flatpak 和 OCI 容器系统(如 Docker、Podman 和类似系统)
- 封装和分发程序及其依赖项,独立于 Linux 系统包管理和
- 通过重用操作系统的内核来运行进程(与虚拟机相比),但仍然与主机系统和其他进程保持一定程度的隔离?
如果这是真的,那有什么区别?
Flatpak 的常问问题说:
Flatpak 是一种容器技术吗?
可以,但不必如此。由于桌面应用程序需要进行大量更改才能在容器内运行,因此您可能会看到 Flatpak 在早期主要部署为方便的库捆绑技术,而沙盒或容器化将随着时间的推移逐步引入大多数应用程序。一般来说,我们在谈论 Flatpak 时尽量避免使用容器这个术语,因为它往往会导致与 Docker 和 rkt 进行比较,由于这些技术试图解决的问题空间非常不同,因此这种比较在技术上很快就变得毫无意义。因此,我们更喜欢使用沙盒这个术语。
不幸的是,如果真正阐述这个主题,这反而有点像谜语。其他问题常见问题解答中是这样的:
Flatpak 也可以在服务器上使用吗?
Flatpak 旨在在桌面会话中运行,并依赖于某些会话服务,例如 D-Bus 会话总线和可选的 systemd --user 实例。这使得 Flatpak 不太适合服务器。
但是,Flatpak 的构建功能在会话之外运行良好,因此您可以在服务器上构建东西。
我猜 Flatpak 的目标只是打包、分发和运行桌面应用程序。
我觉得这很可悲,因为有一系列的容器系统,我天真地认为如果我们有一个可以处理桌面程序的系统就好了。和后台程序别名服务器,服务或守护进程和OCI容器已经标准化。
是的,有些桌面程序只是一个进程,而有些服务将作为数据中心的无数个实例执行,但每个桌面系统也都有后台进程。也许桌面系统上的后台进程很少需要配额之类的功能,但这两种环境都可以利用打包、分发程序及其依赖项并单独运行它们。有什么理由反对在 Podman 内运行桌面应用程序吗?实际上,这引出了一个问题,为什么其中一些隔离内容没有转移到普通的 Linux 进程中。
我隐约记得 Docker 也依赖于用户会话或桌面系统,但我记不清具体内容,现在也找不到任何相关信息,所以也许我只是记错了。无论如何,我可能更喜欢 Podman 而不是 Docker,因为 Podman 不需要守护进程一直运行。
更新:我发现这篇文章涉及了该主题: https://opencontainers.org/posts/blog/2018-11-07-bringing-oci-images-to-the-desktop-with-flatpak/
Flatpak 文档也有一些内容要说: https://docs.flatpak.org/en/latest/under-the-hood.html