容器是一种更轻量级、更敏捷的虚拟化处理方式,由于不使用虚拟机管理程序,因此您可以更快地调配资源,并让新应用程序更快速上市。
容器化不是启动一整台虚拟机,而是将运行单个应用程序或微服务所需的所有内容打包在一起(包括它们运行所需的运行时库)。容器包含所有代码、依赖项,甚至操作系统本身。这使得应用程序几乎可以在任何地方运行,无论是桌面计算机、传统 IT 基础设施还是云环境。
容器使用一种操作系统 (OS) 虚拟化形式。简单来说,它们利用主机操作系统的功能来隔离进程,并控制这些进程对 CPU、内存和磁盘空间的访问。
容器已经存在数十年。然而,普遍的共识是,现代容器时代始于 2013 年 Docker 的推出,这是一个用于构建、部署和管理容器化应用的开源平台。可以了解更多关于 Docker、Docker 容器、Dockerfile(容器镜像的构建文件)以及过去十年容器技术生态的发展情况。
在传统虚拟化中,虚拟机管理程序对物理硬件进行虚拟化。其结果是,每个虚拟机都包含一个客户操作系统、操作系统运行所需的硬件虚拟副本,以及应用程序及其相关的库和依赖项。不同操作系统的虚拟机可以在同一台物理服务器上运行。例如,VMware 虚拟机可以与 Linux 虚拟机并行运行,而 Linux 虚拟机又可以与 Microsoft 虚拟机并行运行,依此类推。
容器虚拟化操作系统(通常是 Linux 或 Windows),而不是虚拟化底层硬件,因此,每个单独的容器仅包含应用程序及其库和依赖项。容器较小、快速且可移植,因为与虚拟机不同,容器不需要在每个实例中包含访客操作系统,而是可以直接使用主机操作系统的功能和资源。
就像虚拟机一样,容器允许开发人员提高物理机的 CPU 和内存利用率。然而,容器甚至更进一步,因为它们还支持微服务架构,可以更精细地部署和扩展应用程序组件。由于单个组件难以承受其负载,因此这是扩展整个单体应用程序的一个具有吸引力的替代选项。
跟随 Nigel Brown 一起深入了解容器与虚拟机 (VM) 有何不同:
尽管容器有许多优势,并且在众多用例中是最佳选择,但它们也存在一些自身的挑战。
大型企业应用可能包含大量容器,而容器管理对团队来说会带来一些重大问题。如何对正在运行的容器及其所在位置保持可视性?如何处理关键问题,如安全性和合规性?如何持续、一致地管理应用程序?
大多数企业正在转向开源解决方案,例如 Kubernetes,而 Kubernetes 已经在许多组织的大多数情况下运行容器。