如果最近才开始学习虚拟化工具,可能想知道围绕容器与虚拟机 (VM) 的技术对话有何不同。容器已经成为云原生开发的主导力量 ,因此了解它们是什么以及它们不是什么很重要。虽然容器和 VM 具有截然不同和独特的特征,但它们的相似之处在于它们都可以提高 IT 效率、提供应用程序可移植性并增强 DevOps 和软件开发生命周期。
虚拟化的工作原理
虚拟化是使用软件在计算机硬件上创建抽象层的过程,该抽象层允许将单个计算机的硬件元素划分为多个虚拟计算机。
所使用的软件称为 管理程序 ——一个小层,可以让多个操作系统并排运行,共享相同的物理计算资源。当在数据中心的物理计算机或服务器(也称为裸机服务器)上使用管理程序时 ,它允许物理计算机将其操作系统和应用程序与其硬件分开。然后,它可以将自己分成几个独立的“虚拟机”。
什么是虚拟机?
虚拟机 (VM) 是一种用于构建虚拟化计算环境的技术。它们已经存在了很长一段时间,被认为是第一代云计算的基础 。
简而言之,虚拟机是物理计算机的仿真。VM 使团队能够在一台计算机上运行看似多台具有多个操作系统的机器。VM 通过使用称为管理程序的轻量级软件层与物理计算机交互。管理程序可以将 VM 彼此分开,并在它们之间分配处理器、内存和存储。
VM 也称为虚拟服务器、虚拟服务器实例和虚拟专用服务器。
什么是容器?
容器是处理虚拟化的一种更轻量级、更敏捷的方式——由于它们不使用管理程序,可以享受更快的资源配置和新应用程序的更快可用性。
容器化不是启动整个虚拟机,而是 将运行单个应用程序或微服务所需的一切打包在一起(连同它们需要运行的运行时库)。容器包括所有代码、其依赖项甚至操作系统本身。这使应用程序几乎可以在任何地方运行——台式计算机、传统 IT 基础设施或云。
容器使用一种操作系统 (OS) 虚拟化形式。简而言之,它们利用主机操作系统的特性来隔离进程并控制进程对 CPU、内存和桌面空间的访问。
容器已经存在了几十年,但普遍的共识是现代容器时代始于 2013 年 Docker 的引入,Docker 是一个用于构建、部署和管理容器化应用程序的开源平台。 详细了解 Docker、Docker 容器、Dockerfile(容器映像的构建文件)以及生态系统在过去十年中如何随着容器技术的发展而发展。
容器与 VM:有何区别?
在传统虚拟化中,虚拟机管理程序虚拟化物理硬件。结果是每个虚拟机都包含一个来宾操作系统、操作系统运行所需的硬件的虚拟副本以及应用程序及其关联的库和依赖项。具有不同操作系统的虚拟机可以运行在同一台物理服务器上。例如,VMware VM 可以在 Linux VM 旁边运行,而 Linux VM 可以在 Microsoft VM 旁边运行,等等。
容器不是虚拟化底层硬件,而是虚拟化操作系统(通常是 Linux 或 Windows),因此每个单独的容器 只包含 应用程序及其库和依赖项。容器体积小、速度快且可移植,因为与虚拟机不同,容器不需要在每个实例中都包含来宾操作系统,而是可以简单地利用主机操作系统的功能和资源。
就像虚拟机一样,容器允许开发人员提高物理机的 CPU 和内存利用率。然而,容器更进一步,因为它们还支持微服务架构,在微服务架构中可以更精细地部署和扩展应用程序组件。这是一个有吸引力的替代方案,因为单个组件正在努力应对负载,因此必须扩展整个单体应用程序。
为什么是容器?
虽然仍然有很多理由使用 VM,但容器提供了一定程度的灵活性和可移植性,非常适合多云世界。当开发人员创建新应用程序时,他们可能不知道需要部署它的所有位置。今天,一个组织可能在其私有云上运行应用程序,但明天可能需要将其部署在来自不同提供商的公共云上。 容器化 应用程序为团队提供了处理现代 IT 的众多软件环境所需的灵活性。
容器也是自动化和 DevOps 管道的理想选择,包括持续集成和持续部署(CI/CD) 实施。
管理多云容器
尽管容器有很多好处,而且在无数用例中它们是最佳选择,但它们也确实面临着一些挑战。大型企业应用程序可能包含大量容器,容器管理给团队带来了一些严重问题。如何才能了解正在运行的内容和位置?如何处理安全性和合规性等关键问题?如何始终如一地管理应用程序?