与在裸机上运行 docker 容器相比,在虚拟机内运行 docker 容器有什么好处?

与在裸机上运行 docker 容器相比,在虚拟机内运行 docker 容器有什么好处?

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

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

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

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

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

答案1

关于您的要点:

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

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

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

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

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

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

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

这大约是均匀的,尽管我个人发现虚拟机的正确扩展比正确的容器要好一些(很可能是因为虚拟机正确地将权限问题转移到了硬件,而容器需要软件来处理它)。

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

不,不完全是。两者都可以进行离线迁移,但是很多容器系统无法进行实时迁移(即移动一个跑步容器从一台主机到另一台)。实时迁移是非常如果您以任何合理的规模运行,出于可管理性的原因,这一点很重要(需要在主机上运行更新?将所有内容迁移到另一个系统,重新启动主机,将第二个主机上的所有内容迁移到第一个主机,重新启动该主机,重新平衡。)。

一些额外的要点:

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

答案2

当硬件对于单一负载来说变得很大时,虚拟化就出现了,并且需要让一台强大的机器执行多个任务,并且任务彼此隔离,这一点变得显而易见。虚拟机在这方面做得非常出色——将大型主机拆分为多个较小的主机。容器是一种不将主机分割成可用块的方法,而是一种隔离特定应用程序和工作负载的方法。

因此,拥有一台功能强大的机器,您可能希望将其分成几个可能具有不同属性(资源、操作系统等)的较小部分,然后在这些虚拟机内运行您的应用程序,因为这对用例有意义。

当然,这不是绝对且唯一的方法,但它是混合虚拟机和容器的最明显的情况

相关内容