Snap 与系统容器

Snap 与系统容器

我曾见过这样的情况:Docker 和 Snap 的主要区别是什么?

我不太明白 snap 和系统容器之间的区别。

  • VM 具有单独的 Linux 内核,并使用虚拟机管理程序使用固定的主机资源。
  • Linux 容器(系统容器,重用/共享内核,并使用动态主机资源。
  • Docker不共享内核,而是通过docker demon(早期docker使用的Linux容器)来动态分配资源。

VM 和 Linux 容器之间是否可以 Snap 配合,即它不仅共享内核,还共享更多的主机系统,而不是使用虚拟机管理程序安装的完全不同的操作系统?

更新:Snap 是沙箱通过中介访问主机系统。

答案1

我认为 Mark 在 2016 年集装箱营演讲中的这张幻灯片用一张图片解释了很多内容,对我来说很有意义:

在此处输入图片描述

视频链接:为什么我们需要一个专门用于应用程序的不同容器 - Mark Shuttleworth (Canonical) - YouTube

简而言之:

  • LXC/LXD 是具有持久文件系统的“机器容器”,其工作方式与 VM 类似
  • Docker 是“进程容器”,在静态镜像上有一个覆盖文件系统(可选择持久存储)
  • Snap 是“应用程序容器”,可直接扩展底层主机的功能

我的个人经历:

  • 我主要将 Docker 用于家庭网络上的所有不同的 Web 服务(UniFi、Grafana/Prometheus、Bookstack、Nextcloud、Syncthing、Transmission、Proxy Manager、Iperf3 等),因为 Docker 特别适合隔离数据和公开不同服务的端口。

  • 如果我需要类似“VM”的功能(我需要安装能够持久保存在容器中的自定义包),我会考虑 LXC/LXD。

  • 我对 snap 的看法很复杂,我认为这完全取决于你的使用情况。对于那些以 snap 形式正式发布的应用,它们可能是值得的(例如 LXD 或 Multipass,它们都是官方的 Canonical snap)。第三方 snap 的质量参差不齐,至少可以这么说。

相关内容