# 容器与虚拟机：哪个是您组织的最佳选择？

> 来源：梦飞idc云平台 | 原文：https://www.mfisp.com/13242.html | 发布：2022-11-25 | 更新：2022-11-25 | 分类：IDC云库

容器和虚拟机 (VM) 相似且互补。两者都增强了应用程序的可移植性、效率并增强了组织中的开发和运营 (DevOps)，尽管存在架构差异。

容器和虚拟机 (VM) 相似且互补。两者都增强了应用程序的可移植性、效率并增强了组织中的开发和运营 (DevOps)，尽管存在架构差异。容器在操作系统 (OS) 级别创建抽象层，允许开发人员专注于应用程序，而运营团队则专注于基础架构。相比之下，虚拟机利用管理程序通过应用程序开发复制底层硬件资源的功能。在容器还是 VM 之间进行选择取决于部署系统的要求。

 

![VMware集群的高可用性和负载平衡](https://www.mfisp.com/wp-content/uploads/2022/08/20220801105451YSTd1X.jpg)

 

## 容器和虚拟机如何工作

 

容器和 VM 都是创建独立的虚拟化程序包的技术。因此，了解它们如何工作的最简单方法是从定义“虚拟化”开始。虚拟化允许您将操作系统与底层硬件隔离开来。因此，您可以在同一台物理机上运行多个操作系统，例如 Linux 和 Windows。

 

传统的虚拟化依赖于管理程序来创建虚拟机。管理程序隔离和编排可用的硬件资源，例如处理器、内存、存储和网络，根据需要将一部分分配给每个虚拟机。

 

### 什么是虚拟机？

 

最终，每个 VM 都包含来宾操作系统、来宾操作系统需要运行的虚拟化硬件以及已安装的应用程序，包括相关的依赖项和库。通常，VM 作为独立的 PC运行，底层基础设施可以针对不同的工作负载运行多个独立的虚拟机。由于每个虚拟机都需要自己的来宾操作系统，因此虚拟机操作是资源密集型的。在大多数情况下，您很少会发现工作负载操作会占用 VM 中的所有可用资源。

 

您也无法在虚拟化环境中运行单独的应用程序功能，除非您为不同的软件模块化元素使用单独的 VM。此外，要在不同的虚拟机或数据中心之间迁移应用程序，您必须将整个操作系统与其一起迁移。正是这个缺点使得容器的采用和使用得到了普及。

 

### 什么是容器？

 

与使用虚拟化硬件的 VM 不同，容器将操作系统虚拟化，允许软件的独立、模块化和不同的功能独立执行。每个容器共享只读主机操作系统的内核，包括二进制文件和库。

 

![KVM与LXC：哪种虚拟化更适合您的业务？](https://www.mfisp.com/wp-content/uploads/2022/03/2022033106391994.png)

 

容器在它们运行的​​每个实例中不需要来宾操作系统——它们只是使用主机操作系统的资源和功能。共享操作系统资源允许服务器在同一个操作系统上运行多个工作负载。因此，容器很轻——它们占用几兆字节——而且与 VM 相比速度很快。

 

与 VM 一样，容器允许开发人员提高物理机的处理器、内存和存储利用率。然而，容器甚至走得更远。它们促进了微服务架构，您可以在其中高效地精细部署和扩展应用程序组件。

 

## 虚拟化的工作原理

 

虚拟化是使用软件在硬件之上构建抽象层的技术，允许将单个计算机的硬件拆分为多个虚拟计算机。管理程序是一个微小的软件层，它允许各种操作系统在共享相同物理计算机资源的同时同时运行。当管理程序安装在数据中心的物理计算机或网络（也称为裸机服务器）上时，它允许操作系统和应用程序与硬件分离。然后它可以被分成多个独立的“虚拟机”。

 

## 容器和虚拟机有何不同

 

容器和 VM在许多方面有所不同，如下表所总结：

 

| 特征 | 容器 | 虚拟机 |
|---|---|---|
| 操作系统 | 它仅运行操作系统的用户模式部分。您可以通过仅选择应用程序需要的服务来自定义容器。 | 它运行整个操作系统，包括内核。它是资源密集型的。 |
| 隔离 | 它不会将主机与其他容器完全隔离。因此，与虚拟机相比，它不提供强大的安全边界。 | 它提供了主机操作系统和其他虚拟机之间的完全隔离。因此，它为在同一服务器或集群上托管应用程序的组织提供了强大的安全性。 |
| 来宾兼容性 | 它运行在与主机相同的操作系统版本上。 | 它可以运行 VM 内的任何操作系统。 |
| 操作系统更新和升级 | 您可以通过两种方式更新或升级容器的操作系统文件。首先，您可以编辑和重建图像文件。其次，您可以使用容器化编排器。 | 您可以通过在每个虚拟机上下载和安装更新来更新或升级 VM 的操作系统。如果您有很多 VM，这将是乏味且耗时的。 |
| 联网 | 它使用虚拟网络适配器 (VNA) 的隔离视图。这提供了主机防火墙与其他容器共享的轻量级虚拟化。 | 它使用具有完全虚拟化的 VNA。 |
| 容错性 | 万一集群节点出现故障，编排器会自动将在其上运行的任何容器重新创建到另一个节点。 | 虚拟机快速故障转移到集群中的另一个节点，来宾操作系统自动重新启动。 |
| 负载均衡 | 编排器自动启动或停止集群节点上的容器以处理负载和可用性的变化。容器不动。 | VM 负载平衡将正在运行的虚拟机移动到故障转移群集中的其他节点。 |

 

## 如何在容器和虚拟机 (VM) 之间做出选择

 

容器和 VM 各有利弊，因此会影响您做出的决定。最终，您的选择主要取决于两件事：

 
 
- 您是否需要一个轻量级实例以便在裸机系统之间轻松迁移？ 
- 您想要一个半永久性的 IT 资源分配解决方案吗？ 

 

### 集装箱

 

容器很轻。您可以在不同的服务器和不同的云部署之间快速移动它们，包括私有、公共和混合环境。如果您的首要任务是在最少数量的服务器上最大化应用程序的数量，则可以考虑使用容器。

 

![KVM与OpenVZ–哪个最适合您的VPS服务器？](https://www.mfisp.com/wp-content/uploads/2022/01/2022012902430963.png)

 

如果您想部署利用微服务架构的云原生应用程序，以实现跨私有云、公共云和混合云环境的一致开发和部署，容器也是理想之选。容器的唯一警告是它们必须与底层操作系统兼容。

 

如果你想，你可以考虑容器：

 
 
- 实施云原生应用程序。 
- 封装微服务。 
- 坚持 DevOps 和持续集成/持续部署 (CI/CD) 实践。 
- 在共享同一操作系统的不同 IT 环境中移动可扩展的应用程序。 

 

### 虚拟机

 

相比之下，虚拟机可以运行比单个容器更多的操作。VM 非常适合需要操作系统的所有资源和功能的单一工作负载。然而，扩展的功能使得 VM 的可移植性不如容器。如果你想：你可以考虑虚拟机：

 
 
- 托管遗留和单体应用程序。 
- 配置服务器、存储和网络等 IT 资源。 
- 隔离有风险的开发环境。 

 

## 何时一起使用容器和虚拟机

 

您可能想知道为什么有人想要同时使用容器和虚拟机。好吧，容器共享主机的操作系统内核，包括二进制文件和库。跨不同发行版运行 Linux 容器不是问题，因为大多数 Linux 发行版都构建在同一内核之上。

 

![专用服务器的终极指南](https://www.mfisp.com/wp-content/uploads/2022/03/2022032203343337.jpg)

 

例如，您可以在基于 CentOS 的主机上高效地运行 Ubuntu 容器。但是，内核共享事实意味着您不能在 Linux 主机上运行 Windows 容器，反之亦然。要运行这些容器，您需要在各自的主机上创建一个 VM。例如，您可以在 Linux 主机上创建 Windows VM 来运行 Windows 容器。这是可能的，因为虚拟机利用自己的操作系统，允许操作系统支持容器引擎。

 

在 VM 内运行容器可将其隔离，从而限制漏洞攻击的范围。例如，如果 500 个容器在裸机服务器上共享一个操作系统内核，并且操作系统出现故障，则所有 500 个容器都会受到损害。另一方面，如果托管 50 个或更少容器的 VM 受到威胁，它只会影响这些容器。此故障不会影响同一服务器或集群中运行不同容器的其他虚拟机。

 

您还可以集成容器和 VM 以实现容量优化。虚拟化在企业 IT 领域很流行，因为它促进了服务器的利用。一台服务器可以托管多个虚拟机，每个虚拟机托管多个容器主机。此外，每台服务器都可以托管许多传统的单体虚拟机。将容器与传统的整体式 VM 集成使 IT 管理员能够最大限度地利用物理服务器。

---
本页由 梦飞idc云平台（https://www.mfisp.com）提供。站点导航见 https://www.mfisp.com/llms.txt
