概述
Linux® 容器和虚拟机(VM)都是封装型计算环境,里面组合了各种 IT 组件并独立于系统的其余部分。两者的主要区别在于扩展性和可移植性。
- 容器通常以兆字节为度量单位。它们封装的内容大小不会超过一个应用及其运行所需的所有文件,并且通常用于封装执行特定任务的单个功能(称为微服务)。容器因其轻量级特性及共享的操作系统(OS),非常便于在多个环境之间移动。
- 虚拟机则一般以千兆字节为度量单位。它们通常包含自己的操作系统(OS),因而能够一次执行多个资源密集型功能。由于虚拟机的可用资源大大增加,因此它们可以抽象、分离、复制和模拟整个服务器、操作系统、台式机、数据库和网络。
除了技术差异之外,容器与虚拟机之间的对比恰恰代表了新兴 IT 实践与传统 IT 架构之间的较量。
我应该使用哪一种技术?
这要取决于您是需要一个可以轻松移动的小型实例(容器),还是需要一种半永久分配的定制 IT 资源?
容器具有规模小、轻量化的特性,因而可轻松地在裸机系统以及公共云、私有云、混合云和多云环境中移动。此外,它们也是部署当今云原生应用的理想环境,云原生应用是一些微服务的集合,旨在跨公共云、私有云、混合云和多云环境提供一致的开发和自动化管理体验。原生云应用可以加快新应用的构建,促进现有应用的优化,并完善所有应用间的连接。需要注意的是,容器必须与底层操作系统兼容。相比虚拟机,容器最适合用于:
- 构建云原生应用
- 封装微服务
- 拓展 DevOps 或 CI/CD 实践
- 在共享同一操作系统的多样化 IT 环境中移动可扩展的 IT 项目
与单个容器相比,虚拟机能够运行更多的操作,因而它们一直是(现在也是)封装单体式工作负载的惯用方式。但是,由于对操作系统、应用和库的依赖性,这种扩展功能也令虚拟机的可移植性大大降低。相比容器,虚拟机最适合用于:
虚拟化
一种叫虚拟机监控程序的软件会把资源与物理机分隔开,以便进行分区并专门用于虚拟机。当用户发出需要从物理环境中获取更多资源的虚拟机指令时,虚拟机监控程序就会将该请求转发到物理系统并将更改放到缓存中。从作用上来看,虚拟机就像物理服务器,它会成倍放大应用依赖项和大量 OS 占用空间(而运行单个应用或微服务往往并不需要这么大的占用空间)造成的弊端。
容器
容器中包含了微服务或应用及运行所需的一切要素。容器中的所有内容都保存在镜像(一个基于代码且包含所有库和依赖项的文件)上。您可以将这些文件视为 Linux 发行版的一个安装实例,因为镜像中包含 RPM 软件包和配置文件。由于容器是如此之小,因此通常会有数百个容器松散地耦合在一起,所以要使用容器编排平台(例如红帽 OpenShift 和 Kubernetes)来置备和管理它们。
为什么选择红帽?
原因其实很简单,因为我们长期致力于支持虚拟化和容器开发。自基于内核的虚拟机(KVM)和 oVirt 社区创立以来,我们一直都积极参与,并且是 Docker 和 Kubernetes 代码库的第二大贡献者。此外,我们还针对这两项技术的未来发展进行了投资。在我们的合力参与下,容器原生虚拟化、KubeVirt 和超融合基础架构等技术正在不断改进容器与虚拟机在同一 IT 系统下的协同工作。