容器是软件的可执行单元,它可用于打包应用程序代码及其库和依赖项。它们允许代码在任意计算环境中运行,无论是桌面、传统 IT 还是云基础设施。
容器利用某种形式的操作系统 (OS) 虚拟化,其中可以使用操作系统内核功能(例如,Linux 命名空间和 cgroup、Windows 孤岛和作业对象)隔离进程,并控制这些进程可以访问的 CPU、内存和磁盘数量。
由于具有比虚拟机 (VM) 更高的可移植性和资源效率,容器已成为现代云原生应用程序事实上的计算单元。此外,容器对于支持混合多云环境的底层 IT 基础设施至关重要,这些混合多云环境是指本地部署、私有云、公有云和来自多个云供应商的多项云服务的组合。
根据 Business Research Insights 的报告1,2021 年全球容器技术市场的价值为 4.964 亿美元,而到 2031 年则预计会达到 31.2342 亿美元,复合年增长率 (CAGR) 则为 19.8%。
更好地理解容器的一种方法是查看它与传统虚拟机 (VM) 的区别,后者是物理计算机的虚拟表示或模拟。虚拟机通常称为客户机,而运行它们的物理机称为主机。
虚拟化技术使虚拟机成为可能。虚拟机管理程序(一个小型软件层)为每个虚拟机分配物理计算资源(例如处理器、内存、存储)。它将每个虚拟机与其他虚拟机隔离,以免相互干扰。每个虚拟机包含客户机操作系统、操作系统运行所需的硬件的虚拟副本以及应用程序及其相关的库和依赖项。VMware 是最早基于虚拟机管理程序开发虚拟化技术并将其商业化的公司之一。
容器技术并非对底层硬件虚拟化,而是对操作系统(通常为 Linux)进行虚拟化,因此每个容器仅包含应用程序及其库、配置文件和依赖项。由于没有访客操作系统,容器非常轻便,因此它比 VM 更为快速且可移植。
容器和虚拟机并不互相排斥。例如,组织可以在虚拟机中运行容器以利用这两种技术,从而提高隔离性和安全性,并利用已经安装的工具进行自动化、备份和监控。
要深入了解这一比较,请阅读“容器与虚拟机:有什么区别?”并观看视频:
容器的主要优点(尤其是与虚拟机相比)在于,它们提供一定程度的抽象,以使其轻便且可移植。它们的主要优点包括:
容器共享机器操作系统内核,而无需为每个应用程序实施完整操作系统实例,并使容器文件更小、资源消耗更少。容器更小(尤其是与虚拟机相比)意味着,容器可以快速启动,并更好地支持水平扩展的云原生应用程序。
容器带有所有依赖项,这意味着软件只需编写一次即可运行,而无需在计算环境(例如笔记本电脑、云端和本地)中重新配置。
与 VM 一样,容器允许开发人员和操作员提高物理机的 CPU 与内存利用率。容器在此方面更胜一筹,因为它们支持微服务架构,以便更精细地部署和扩展应用程序组件。由于单个组件难以承受其负载,因此这是扩展整个单体应用程序的一个具有吸引力的替代选项。
容器对系统资源的依赖程度较低,因此管理和部署容器的速度要比虚拟机更快。这一特性有助于节省应用程序部署的成本和时间,并优化上市时间。
在 IBM 的一项调查中,开发人员和 IT 高管报告了容器的众多其他优点。查看完整报告:企业中的容器。
容器依赖容器化,容器化是指将软件代码只与操作系统 (OS) 及其相关环境变量、配置文件、库和软件依赖项打包在一起。
结果为一个在容器平台上运行的容器映像。容器映像代表二进制数据,其中封装了应用程序及其所有软件依赖项。
借助容器化,应用程序“只需编写一次,即可在任何地方运行”,从而提供可移植性、加快开发流程并防止出现云供应商锁定等问题。
容器化和进程隔离已经诞生了数十年2。1979 年,随着 Unix 版本 7 操作系统中的 chroot 的面世,容器的发展迎来了一个历史性时刻。通过限制应用程序的文件访问特定的目录(根目录)及其子目录(或子进程),chroot 引入了进程隔离的概念。
另一个重要的里程碑发生在 2008 年,当时在 Linux® 内核中实施了 Linux 容器 (LXC),从而完全实现了单个 Linux 实例的虚拟化。多年来,FreeBSD Jails 和 AIX Workload Partitions 等技术也提供了类似的操作系统级虚拟化功能。
虽然 LXC 仍是众所周知的一个运行时,且是 Linux 发行版和供应商中立项目的一部分3,但也有更新的 Linux 内核技术可供使用。Ubuntu 是一个现代的开源 Linux 操作系统,也提供了这个功能。
观看视频,以深入了解容器化:
随着 Docker 的推出,大多数开发人员都将 2013 年视为现代化容器时代的开端。Docker 是一个开源容器化软件平台,可用作平台即服务 (PaaS),开发人员可以使用它构建、部署、运行、更新和管理容器。
Docker 使用 Linux 内核(操作系统的基本组件)和内核功能(例如 Cgroups 和命名空间)来隔离进程,以使它们能够独立运行。Docker 本质上是将应用程序及其依赖项转换成虚拟容器,这些容器可以在任何运行 Windows、MacOS 或 Linux 的计算机系统上运行。
Docker 基于客户端-服务器架构,而 Docker 引擎则被用作底层技术。Docker 可提供基于映像的部署模型,以便简化跨计算环境的应用程序共享。
为了澄清任何混淆,与 Docker 容器平台同名的 Docker 也指 Docker, Inc.4,该公司围绕他们的开源容器化平台以及 Docker 开源生态系统和社区5 开发了生产力工具。
2015 年,Docker 和容器行业的其他领导者发起了“开放容器倡议”6,作为 Linux 基金会的一个项目,此倡议是一个开放的治理结构,专为围绕容器格式和运行环境制定开放行业标准而设计。
Docker 是应用最广泛的容器化工具,且占有 82.84% 的市场份额7。
在一个系统中运行数十万个容器可能会让管理它们变得十分困难,需要借助一个编排管理解决方案。
此时,容器编排便有了用武之地;它可让公司在其整个生命周期中管理大量数据,从而提供:
虽然存在其他容器编排平台(例如,Apache Mesos、Nomad、Docker Swarm),但 Kubernetes 已成为行业标准。
Kubernetes 架构由正在运行的集群组成,而这些集群允许容器在多个计算机和环境中运行。每个集群通常由若干工作节点和控制计划节点组成;前者可运行容器化应用程序,后者则可控制集群。控制平面则充当 Kubernetes 集群的编排器。它包括若干组件:API 服务器(管理与 Kubernetes 的所有交互)、控制管理器(处理所有控制流程)、云控制器管理器(面向云提供商的 API 的接口)等等。工作节点使用容器运行时(如 Docker)来运行容器。Pod 是集群中的最小可部署单元,它可容纳一个或多个应用程序容器,并共享存储和网络信息等资源。
借助 Kubernetes,开发人员和操作人员可通过 YAML 文件来声明其整体容器环境的所需状态。然后,Kubernetes 会执行建立并维护该状态的所有处理工作,以及包括以下内容的其他操作:部署给定应用程序或工作负载的指定数量的实例、失败时重新启动该应用程序、执行负载均衡、自动缩放、零停机时间部署等等。附带 Kubernetes 的容器编排对于持续集成和持续交付 (CI/CD) 或 DevOps 管道也至关重要;如果缺少自动化,便无法实现这些管道。
2015 年,Google 将 Kubernetes 捐赠给云原生计算基金会 (CNCF)8,该基金会是在 Linux 基金会的支持下运营的开源、供应商中立的云原生计算中心。从那时起,Kubernetes 已成为全球运行基于容器的工作负载时使用最为广泛的容器编排工具。根据 CNCF 的一份报告9,Kubernetes 是全球第二大开源项目(仅次于 Linux),也是 71% 的财富 100 强公司的主要容器编排工具。
容器即服务 (CaaS) 是一种云计算服务,允许开发者管理和部署容器化应用程序。它使各种规模的企业都能访问可移植、可扩展的云解决方案。
CaaS 提供了一个基于云的平台,用户可以在其中简化基于容器的虚拟化和容器管理流程。CaaS 提供商提供了多种功能,包括(但不限于)容器运行时、编排层和持久存储管理。
与基础设施即服务 (IaaS)、平台即服务 (PaaS) 和软件即服务 (SaaS) 类似,CaaS 也可通过即用即付定价模式从云服务提供商(例如 AWS、Google Cloud Services、IBM Cloud®、Microsoft Azure)获得,此定价模式让用户只需为他们使用的服务付费。
组织利用容器支持以下内容:
容器小巧轻便,因而非常适合微服务架构;而在这些架构中,应用程序由众多松散耦合且可独立部署的小型服务组成。
容器还提供了一种高效的方法,以部署和管理大型语言模型 (LLM),这些大型语言模型与生成式 AI 相关联,在与编排工具结合使用时可提供可移植性和可扩展性。此外,还可以将对 LLM 进行的更改快速打包到一个新的容器映像中,以加速开发和测试。
除 Kubernetes 以外,容器生态系统中最受欢迎的两个项目为 Istio 和 Knative。
在开发人员使用容器构建和运行微服务时,管理问题不再局限于各个容器的生命周期注意事项,还涉及大量小型服务(通常被称为“服务网格”)如何相互连接和关联。使用 Istio,开发人员可以更轻松地应对与发现、流量、监控、安全性等方面相关的挑战。
由于容器在混合云环境的软件开发和部署中发挥着重要作用,组织需要确保他们的容器化工作负载不受外部和内部安全威胁的影响。
容器可部署在任意位置,而这会在基于容器的环境周围形成新的攻击面。易受攻击的安全领域包括:容器映像、映像注册表、容器运行时、容器编排平台和主机操作系统。
首先,企业需要将容器安全性整合到他们的安全策略和整体战略中。此类策略必须包含安全最佳实践以及基于云的安全软件工具。这种整体方法的设计应当在容器的整个生命周期内保护容器化应用程序及其底层基础设施。
最佳安全实践包括零信任策略,此策略假设复杂网络的安全性始终面临着外部和内部威胁的风险。此外,容器还需要采用 DevSecOps 方法。DevSecOps 是一种应用程序开发实践,可以在软件开发生命周期的每个阶段(从初步设计到集成、测试、交付和部署)自动整合安全实践。
组织还需要使用正确的容器安全工具,以缓解风险。自动化安全解决方案包括配置管理、访问控制、恶意软件或网络攻击扫描、网络分段、监控等等。
此外,还提供了一些软件工具,以确保容器化工作负载遵守合规性和监管标准,例如 GDPR、HIPAA 等等。
Red Hat OpenShift on IBM Cloud 是一个完全托管的 OpenShift 容器平台 (OCP)。
容器解决方案能够运行和扩展容器化工作负载,并实现安全性、开源创新和快速部署。
利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。
1 容器技术市场规模、份额、增长情况和行业分析,按类型(Docker、Rkt、CRI-O 等)划分、按应用(监控、数据管理、安全等)划分、区域洞察分析以及 2024 年至 2031 年的预测,Business Research Insights,2024 年 2 月。
2 容器简史:从 20 世纪 70 年代至今,Aqua,2020 年 1 月 10 日。
3 https://linuxcontainers.org/
4 关于 Docker,Docker。
5 开源项目,Docker。
6 开放容器倡议
7 2024 年的 5 大容器化技术,6sense。
8 云原生计算基金会
9 Kubernetes 项目旅程报告,CNCF,2023 年 6 月 8 日。