在哪里使用容器和虚拟机?
容器和虚拟机都是部署技术。在软件开发生命周期中,部署是使应用程序在服务器或设备上高效运行的机制。该应用程序需要几个称为依赖项的附加软件组件,这些组件与服务器的底层操作系统密切相关。应用程序代码和物理设备之间所有不同的软件层统称为应用程序环境。
软件部署中的挑战
在发布新功能之前,组织通常必须在多个环境中部署应用程序,例如,在 Linux 环境中进行开发以及在 Windows 中进行测试。由于缺少依赖项,在各个环境之间迁移应用程序可能会导致错误和故障,从而降低生产率。同时,仅在一个环境中构建和测试应用程序则会降低其实用性。下面是一些示例:
- 您可能需要为使用不同操作系统的用户开发不同的版本
- 您的系统管理员必须统一更新和维护所有环境,这会增加开发成本
- 您可能会发现将应用程序从本地数据中心迁移到云或在不同的云环境之间进行迁移比较困难
虚拟机的用途
过去,开发虚拟机技术是为了有效利用不断增加的物理硬件容量和处理能力。在单个物理服务器上运行单个应用程序环境导致硬件资源的利用率低下。虚拟机允许组织在同一台物理计算机上安装多个操作系统并创建多个环境。
容器的用途
创建容器是为了在多个环境中以可预测和可重复的方式打包和运行应用程序。您不必重建环境,只需将应用程序打包,以便在所有类型的物理或虚拟环境中运行。这类似于让宇航员穿上宇航服,而不是在另一个星球上为他们重建地球大气层。
容器和虚拟机的相似之处
容器和虚拟机允许应用程序完全隔离,以便您可以在多个环境中运行。它们虚拟化或抽象化了底层基础设施,因此用户无需担忧。它们还允许您将软件基础设施打包到称为图像文件的单个文件中。您可以使用图像文件快速设置应用程序并在任何地方运行。此外,您还可以使用软件流程来管理系统配置或进行扩展,以同时管理数千个应用程序。但是,容器和虚拟机的作用和使用范围取决于应用程序的部署位置和方式。
主要区别:容器与虚拟机
容器可虚拟化操作系统,因此应用程序可以在任何平台上独立运行。虚拟机则超越这点,可虚拟化物理计算机,因此您可以有效利用自己的硬件资源。下面列出了两者的更多区别。
工作原理
容器技术涉及构建自给自足的软件包,无论这些软件包在哪些机器上运行,性能都始终如一。软件开发人员创建和部署容器映像,即包含运行应用程序所需信息的文件。容器映像为只读,计算机系统无法更改。
虚拟机技术涉及在物理服务器或计算机上安装虚拟化软件。物理计算机称为主机,虚拟机称为客户机。您可以根据需要配置和更新客户机操作系统及其应用程序,而不会影响主机操作系统。
核心技术
虚拟机使用虚拟机监控器在客户机操作系统和主机操作系统之间进行通信。虚拟机监控器协调资源共享,因此虚拟机与同一硬件上的其他几个虚拟机分开运行。
另一方面,容器使用容器引擎或容器运行时。此软件作为容器和操作系统之间的中间代理,提供和管理应用程序所需的系统资源。Docker 是最受欢迎的开源容器引擎。
大小
虚拟机映像文件较大(数 GB),因为这些文件包含自己的操作系统。资源增加意味着您可以复制、拆分、抽象和模拟整个服务器、数据库、桌面和网络。容器文件更轻量,可以用 MB 单位进行衡量。容器只打包运行单个应用程序所需的资源。
何时使用容器与虚拟机
这里列出了在虚拟机和容器之间进行应用程序部署选择时需要考虑的一些因素。
环境配置
虚拟机使开发人员能够更好地控制应用程序的环境。他们可以手动安装系统软件、快照配置状态,并在需要时将其还原到以前的状态。虚拟机有助于构思和实验,或测试不同环境以提高应用程序的性能。
选择最佳配置后,容器会提供静态配置定义。
软件开发速度
虚拟机是全栈系统,可能很难构建和重新生成。验证任何修改都非常耗时,因为您必须重新生成环境。
如果您想经常构建、测试和发布新功能,选择容器更合适。容器只包含高级软件,因此修改和迭代速度非常快。
可扩展性
虚拟机会占用更多存储空间,需要您在本地数据中心配置更多硬件。切换到云实例可以降低成本,但迁移整个环境也会带来挑战。
容器占用的空间更少并且更容易扩展。更重要的是,容器允许您使用微服务,因此能提供对应用程序可扩展性的精细控制。微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的 API 进行通信的小型独立服务组成。容器可以让您根据需要扩展单个微服务。
差异摘要:容器与虚拟机
特性 |
容器 |
虚拟机 |
定义 |
软件代码包包含应用程序代码、代码库和组成应用程序运行环境的其他依赖项。 |
物理计算机的数字副本。将物理硬件划分为多个环境。 |
虚拟化 |
虚拟化操作系统。 |
虚拟化底层物理基础设施。 |
封装 |
运行应用程序或应用程序组件所需的操作系统之上的软件层。 |
操作系统,系统之上的所有软件层,多个应用程序。 |
技术 |
容器引擎与底层操作系统进行资源协调。 |
虚拟机监控器与底层操作系统或硬件进行协调。 |
大小 |
轻量级(以 MB 为单位)。 |
重量级(以 GB 为单位)。 |
控制 |
不易于控制容器外部的环境。 |
更易于控制整个环境。 |
灵活性 |
更灵活。您可以在本地环境和以云为中心的环境之间快速迁移。 |
不够灵活。迁移困难。 |
可扩展性 |
高度可扩展。微服务可以实现精细的可扩展性。 |
扩展成本高昂。需要从本地实例切换到云实例以实现经济高效的扩展。 |
详细了解容器 | 详细了解虚拟机 |
AWS 如何通过容器和虚拟机提供帮助?
AWS 提供多种服务以满足您的所有应用程序部署需求。下面是一些示例:
- AWS App2Container 是一种容器化工具,使软件开发人员能够实现传统应用程序的现代化。开发人员使用 AWS App2Container 将 Java 和 .NET 应用程序转换为容器化应用程序。
- Amazon Elastic Container Registry(Amazon ECR)是一个高度可用且安全的私有容器存储库,让您能够轻松地存储和管理 Docker 容器镜像。
- Amazon Elastic Container Service(Amazon ECS)是一种高度可扩展的高性能容器编排服务,支持在 AWS Cloud 上运行 Docker 容器。
- Amazon Elastic Compute Cloud(Amazon EC2)让您可以对云实例进行精细控制,您还可以选择想要的处理器、存储和网络。
- AWS Fargate 是一种适用于 Amazon ECS 的技术,让您无需部署或管理基础设施即可运行 Docker 容器。
- VMWare Cloud on AWS 让您可以简化和加速任务关键型生产工作负载从本地虚拟机到 AWS Cloud 的迁移。
立即创建免费 AWS 账户,开始进行虚拟化和容器化。