在 VM 中运行 docker 容器与在裸机上运行 docker 容器有什么好处?

Tre*_*rKS 5 linux kvm virtual-machine debian docker

与在裸机上(直接在主机上)运行 docker 容器相比,在 VM 内运行 docker 容器有什么好处?

我听说过一些公司在 VM 中运行 docker 容器,特别是在 docker 会议中提到一些组织正在这样做。为什么?

(比较在主机上运行的 Docker 容器与在主机上的 KVM 内运行的 Docker 容器)

  • Docker 和 KVM 都有保存当前状态的方法,这里没有额外的好处
  • Docker 和 KVM 都可以提供单独的 IP 供网络使用
  • Docker 和 KVM 都将运行的程序和安装分开,以免与主机运行的进程发生冲突
  • Docker 和 KVM 都提供了随企业增长而扩展的简单方法
  • 两者都提供将实例移动到不同主机的简单方法

那么为什么有人会在 KVM 中运行 Docker?他们不会从 KVM 中承受不必要的性能损失吗?

Aus*_*arn 9

关于你的主要观点:

Docker 和 KVM 都有保存当前状态的方法,这里没有额外的好处

除了它们存储状态的方式不同之外,一种方法或另一种方法可能更有效。此外,您无法可靠地保存 100% 的容器状态。

Docker 和 KVM 都可以提供单独的 IP 供网络使用

根据您使用的 VM 和容器系统,为 VM 设置这可能比为容器设置更容易。如果您想要为虚拟机/容器提供专用的第 2 层接口,则尤其如此,这对于虚拟机来说几乎总是更容易。

Docker 和 KVM 都将运行的程序和安装分开,以免与主机运行的进程发生冲突

虚拟机比容器做得更好。容器仍在对主机操作系统进行本机系统调用。这意味着他们可以直接利用这些系统调用中的任何错误。VM 有自己的操作系统,因此它们的隔离性要好得多。

Docker 和 KVM 都提供了随企业增长而扩展的简单方法

这几乎是平均的,尽管我个人发现 VM 的正确扩展比容器做得好一些(很可能是因为 VM 正确完成了将权限问题卸载到硬件,而容器需要软件来处理它)。

两者都提供将实例移动到不同主机的简单方法

不,不完全是。两者都可以做离线迁移,但是很多容器系统不能做实时迁移(即将一个正在运行的容器从一台主机移动到另一台主机)。实时迁移是非常可管理性的原因很重要,如果你在任何合理的规模运行(需要运行在主机上的更新吗?一切都迁移到另一个系统,重新启动主机,迁移事事休第二主机的第一,重启的是,重新平衡。)。

一些额外的点:

  • VM 通常更容易使用高可用性选项。这并不是说容器没有这样的选项,只是它们通常更容易使用,并且可以更容易地使用 VM 来调整应用程序代码。
  • VM 更容易直接迁移到云托管或从云托管迁移(您不必在很大程度上关心底层托管环境是什么样的)。
  • VM 允许您运行与主机操作系统不同的平台。即使不同的 Linux 发行版在内核配置上也有足够的差异,以至于不能完全保证为一个发行版编写的东西在另一个发行版上工作。
  • VM 使您可以更好地控制潜在的攻击面。使用容器,您无法摆脱主机操作系统的代码仍在内存中的事实,因此是潜在的攻击媒介。使用虚拟机,您运行的是一个独立的操作系统,因此您可以将其精简到您实际需要的绝对最小值。
  • 在 VM 中一起运行一组相关容器为您提供了一种简单的万无一失的方法来一起启动和停止该组容器。