你可能会发现
Mark Shuttleworth在Container Camp上的演讲"为什么我们需要一个专门用于应用程序的不同容器"与你的问题相关。他一开始就谈到了虚拟机、容器和Docker,然后在大约九分钟后继续讲解了Snaps以及它们的适用性。以下是我的总结:
不同类型的容器看起来相同,但用于不同的目的。
在内核级别上,容器实际上并不存在。可以创建不同类型的幻觉。我们可以独立地为容器所见到的用户、网络、磁盘和进程创建幻觉。
不同类型的容器实际上是关于创建的不同类别的幻觉。
Snaps 是:
- 不可变的,但仍然是基本系统的一部分。
- 在网络方面进行集成,因此共享系统的 IP 地址,与 Docker 不同,Docker 中每个容器都有自己的 IP 地址。
- 换句话说,Docker 给了我们一个东西“那里”。Snaps 给了我们一个东西“这里”。例如,在桌面上,一个 snap 可以直接提供一个应用程序。
- 一个 snap 不能污染系统的其他部分。它处于自己的盒子中。但它仍然可以(只读)看到系统的其他部分,这使得它能够与系统进行通信和集成。
你询问了与Docker不同的用例。这里有一个snaps可以做到但是Docker不能的:桌面应用程序。第三方可以使用snaps发布桌面应用程序,用户可以轻松安装和更新它们。Docker容器不能(轻松地)在屏幕上与用户图形交互,从用户的主目录加载文档或通过用户的网络摄像头提供视频会议。Snaps可以(一旦获得许可)。
你可能会问这比使用PPA好在哪里。但与Docker相比,这就像问Docker如何比手动在系统上安装依赖项更好。它更好,但具体如何最好在一个单独的、非Docker特定的问题中回答。