登录 / 注册 Account

容器

容器 vs 虚拟机

Linux® 容器虚拟机(VM)都是封装型计算环境,里面组合了各种 IT 组件并独立于系统的其余部分。两者的主要区别在于扩展性和可移植性。

  • 容器通常以兆字节为度量单位。它们封装的内容大小不会超过一个应用及其运行所需的所有文件,并且通常用于封装执行特定任务的单个功能(称为微服务)。容器因其轻量级特性及共享的操作系统(OS),非常便于在多个环境之间移动。
  • 虚拟机则一般以千兆字节为度量单位。它们通常包含自己的操作系统(OS),因而能够一次执行多个资源密集型功能。由于虚拟机的可用资源大大增加,因此它们可以抽象、分离、复制和模拟整个服务器、操作系统、台式机、数据库和网络

除了技术差异之外,容器与虚拟机之间的对比恰恰代表了新兴 IT 实践与传统 IT 架构之间的较量。

新兴 IT 实践云原生开发、CI/CD DevOps)之所以可行,是因为工作负载被分解成了很小的服务单元(通常为功能或微服务)。这些小型单元被完好地封装在容器中,这样多个团队就可以在不中断或影响其他容器中的代码的情况下,处理应用或服务的各个部分。

传统 IT 架构(单体式和传统架构)则是将工作负载的各个部分都放在一个无法拆解的大文件中,因此需要在一个更大的环境(通常是虚拟机)中进行整体封装。在虚拟机中构建和运行整个应用曾经一度司空见惯,但将所有代码和依赖项都放在一个地方会导致虚拟机体量过大 ,并因此导致在推送更新时出现级联故障和停机。

我应该使用哪一种技术?

这要取决于您是需要一个可以轻松移动的小型实例(容器),还是需要一种半永久分配的定制 IT 资源?

容器具有规模小、轻量化的特性,因而可轻松地在裸机系统以及公共云、私有云、混合云和多云环境中移动。此外,它们也是部署当今云原生应用的理想环境,云原生应用是一些微服务的集合,旨在跨公共云私有云混合云多云环境提供一致的开发和自动化管理体验。原生云应用可以加快新应用的构建,促进现有应用的优化,并完善所有应用间的连接。需要注意的是,容器必须与底层操作系统兼容。相比虚拟机,容器最适合用于:

  • 构建云原生应用
  • 封装微服务
  • 拓展 DevOps 或 CI/CD 实践
  • 在共享同一操作系统的多样化 IT 环境中移动可扩展的 IT 项目

与单个容器相比,虚拟机能够运行更多的操作,因而它们一直是(现在也是)封装单体式工作负载的惯用方式。但是,由于对操作系统、应用和库的依赖性,这种扩展功能也令虚拟机的可移植性大大降低。相比容器,虚拟机最适合用于:

  • 存放传统的单体式工作负载
  • 隔离存在风险的开发周期
  • 置备基础架构资源(如网络、服务器和数据
  • 在另一个操作系统内运行不同的操作系统(例如在 Linux 上运行 Unix)

它们是如何运作的?

虚拟化

一种叫虚拟机监控程序的软件会把资源与物理机分隔开,以便进行分区并专门用于虚拟机。当用户发出需要从物理环境中获取更多资源的虚拟机指令时,虚拟机监控程序就会将该请求转发到物理系统并将更改放到缓存中。从作用上来看,虚拟机就像物理服务器,它会成倍放大应用依赖项和大量 OS 占用空间(而运行单个应用或微服务往往并不需要这么大的占用空间)造成的弊端。

容器

容器中包含了微服务或应用及运行所需的一切要素。容器中的所有内容都保存在镜像(一个基于代码且包含所有库和依赖项的文件)上。您可以将这些文件视为 Linux 发行版的一个安装实例,因为镜像中包含 RPM 软件包和配置文件。由于容器是如此之小,因此通常会有数百个容器松散地耦合在一起,所以要使用容器编排平台(例如红帽 OpenShiftKubernetes)来置备和管理它们。

为什么选择红帽?

原因其实很简单,因为我们长期致力于支持虚拟化和容器开发。自基于内核的虚拟机(KVM)oVirt 社区创立以来,我们一直都积极参与,并且是 Docker 和 Kubernetes 代码库的第二大贡献者。此外,我们还针对这两项技术的未来发展进行了投资。在我们的合力参与下,容器原生虚拟化KubeVirt 和超融合基础架构等技术正在不断改进容器与虚拟机在同一 IT 系统下的协同工作。

开启容器和虚拟机的利器,我们已为您准备妥当

Red Hat OpenShift Logo

开发、部署和管理容器——不限位置,不限规模。

借助虚拟机监控程序和便捷的虚拟机管理平台,部署数十或数百个虚拟机。