什么是虚拟机

为何使用虚拟机?

虚拟机有几个关键优势。它们使在一台设备上运行多个操作系统环境成为可能。这使得它们成为启动多台服务器、测试基于各种不同操作系统配置的应用程序构建或运行传统应用程序的一种低成本且高效的方式。例如,一家企业依赖为版本非常旧的 Windows 所编写的客户帐户系统,那么该企业可以提供包含该应用程序的虚拟机,而不必使用专用的旧硬件来运行该软件。

虚拟机管理程序为每个来宾提供了一个沙盒环境。这使得 VM 在安全性方面非常有用,因为来宾无法直接访问彼此的文件系统或内存。如果病毒感染了虚拟机,则任何损害都应受到抑制。如果虚拟机由于程序错误而崩溃,主机和其他虚拟机应该不受影响。

虚拟机的另一个有用的功能是易于备份、移动和恢复。创建虚拟机备份只需备份配置文件和磁盘映像即可。在灾难恢复场景中,将这些文件还原到新主机并重新打开虚拟机,可帮助组织更轻松地恢复正常运行。由于虚拟机独立于硬件,因此可将备份还原到具有足够资源运行该来宾的任何服务器。

然而,虚拟机的沙盒化、高度可移植性确实是有代价的。每个来宾虚拟机都运行一个完整的操作系统副本。如果服务器功能不够强大,在一台物理服务器上运行多个虚拟机可能会导致稳定性问题。根据虚拟机的预期用途,可能会有一种更有效的方式来实现您的目标,例如容器。

容器与虚拟机

容器是虚拟化技术的一种形式,它与虚拟机有许多相似之处,但用途略有不同。虚拟机模拟整个计算机,包括操作系统和硬件层,而容器仅虚拟化操作系统上运行的软件层。IEEE 将容器 描述为虚拟机的轻量级替代方案 。

虽然虚拟机在可直接在硬件上也可在操作系统内运行的虚拟机管理程序上运行,但是容器在容器引擎中运行。每个容器都有运行其所包含的软件所需的任何二进制文件和库的副本,但容器不需要自己的操作系统副本。容器共享运行它们的硬件,尽管它们对文件系统的访问将受到限制。

流行的容器管理软件包括 Docker、Google Kubernetes Engine、LXC 和 Portainer。容器通常用于云计算平台,作为快速部署运行脚本或微服务所需的所有内容的一种方式。

容器的一些优点包括:

它们是轻量级的,因为它们只包含运行它们绝对必要的二进制文件和库。

它们易于启动和管理。

容器的缺点是:

无法将单个主机上的操作系统与容器混合搭配。

无状态容器易于创建,但 管理有状态容器 需要更多的规划。

由于容器未完全沙盒化,因此通常被认为不如虚拟机安全。

容器安全问题是一个复杂的问题,正确配置的容器可提供强大的安全性。容器中的应用程序彼此隔离,这使得它们比直接在主机上运行单个应用程序更安全。此外,与全面的虚拟机相比,每个容器的攻击面更小。某些容器是无状态的,因此每次启动它们时,容器都是具有相同配置的“全新状态”。无状态容器对于某些类型的微服务器很有用,在某些情况下,缺乏持久性存储可以被视为一种安全特性。

但是,无状态容器不太适合运行更复杂的服务,或者在从中断中恢复时能够保留应用程序状态的服务。此外,容器共享一个操作系统,因此,如果一个容器遭到入侵,攻击者就有机会入侵在同一台计算机上运行的其他容器。对于虚拟机,如果一个虚拟机遭到入侵,则攻击者无法利用该访问权限来破坏同一主机上的其他虚拟机。

何时选择容器还是虚拟机

一般来说,如果您需要在一台机器上运行多个操作系统,或者需要能够拍摄不同状态的机器快照以进行备份,那么使用虚拟机是个好主意。拥有可随时部署的虚拟机有助于轻松扩展操作系统,从灾难恢复的角度来看,这是有益的。

容器可用于部署较小的微服务,或作为 DevOps 管道的一部分。在《今日 EPR》的一篇文章中,Daniel Riedel 将哲学上的差异解释为“宠物与牛”。容器是牛,被视为商品并按需启动,而单体服务更有可能在虚拟机中运行,并像宠物一样得到精心照料。