什么是容器?

发布日期 2024年5月9日
许多笔记本电脑的无缝纹理由纸张制成。
By Stephanie Susnjara and Ian Smalley

容器定义

容器是软件的可执行单元,它可用于打包应用程序代码及其库和依赖项。它们允许代码在任意计算环境中运行,无论是桌面、传统 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 更为快速且可移植。

容器和虚拟机并不互相排斥。例如,组织可以在虚拟机中运行容器以利用这两种技术,从而提高隔离性和安全性,并利用已经安装的工具进行自动化、备份和监控。

要深入了解这一比较,请阅读“容器与虚拟机:有何区别?”并观看视频:

容器的主要优点

容器的主要优点(尤其是与虚拟机相比)在于,它们提供一定程度的抽象,以使其轻便且可移植。它们的主要优点包括:

轻量化

容器共享机器操作系统内核,而无需为每个应用程序实施完整操作系统实例,并使容器文件更小、资源消耗更少。容器更小(尤其是与虚拟机相比)意味着,容器可以快速启动,并更好地支持水平扩展的云原生应用程序。

可移植且独立于平台

容器带有所有依赖项,这意味着软件只需编写一次即可运行,而无需在计算环境(例如笔记本电脑、云端和本地)中重新配置。

支持现代化开发和架构

由于容器具有跨平台的部署可移植性和一致性且大小较小,因此它非常适合现代的开发与应用模式(例如 DevOps无服务器微服务),而这些模式是通过常规代码部署并以小幅增量的方式来构建的。

提高利用率

与 VM 一样,容器允许开发人员和操作员提高物理机的 CPU 与内存利用率。容器在此方面更胜一筹,因为它们支持微服务架构,以便更精细地部署和扩展应用程序组件。由于单个组件难以承受其负载,因此这是扩展整个单体应用程序的一个具有吸引力的替代选项。

上市时间加速

容器对系统资源的依赖程度较低,因此管理和部署容器的速度要比虚拟机更快。这一特性有助于节省应用程序部署的成本和时间,并优化上市时间。

在 IBM 的一项调查中,开发人员和 IT 高管报告了容器的众多其他优点。查看完整报告:企业中的容器

IBM DevOps

什么是 DevOps?

Andrea Crawford 阐述了什么是开发运维、开发运维的价值,以及开发运维实践和工具如何帮助您完成从应用程序构思到生产的整个软件交付管道。本课程由 IBM 资深思想领袖主导,旨在帮助企业领导者获得所需的知识,以优先考虑能够推动增长的 AI 投资。

什么是容器化?

容器依赖容器化,容器化是指将软件代码只与操作系统 (OS) 及其相关环境变量、配置文件、库和软件依赖项打包在一起。

结果为一个在容器平台上运行的容器映像。容器映像代表二进制数据,其中封装了应用程序及其所有软件依赖项。

借助容器化,应用程序“只需编写一次,即可在任何地方运行”,从而提供可移植性、加快开发流程并防止出现云供应商锁定等问题。

容器化的演变

容器化和进程隔离已经诞生了数十年2。1979 年,随着 Unix 版本 7 操作系统中的 chroot 的面世,容器的发展迎来了一个历史性时刻。通过限制应用程序的文件访问特定的目录(根目录)及其子目录(或子进程),chroot 引入了进程隔离的概念。

另一个重要的里程碑发生在 2008 年,当时在 Linux® 内核中实施了 Linux 容器 (LXC),从而完全实现了单个 Linux 实例的虚拟化。多年来,FreeBSD Jails 和 AIX Workload Partitions 等技术也提供了类似的操作系统级虚拟化功能。

虽然 LXC 仍是众所周知的一个运行时,且是 Linux 发行版和供应商中立项目的一部分3,但也有更新的 Linux 内核技术可供使用。Ubuntu 是一个现代的开源 Linux 操作系统,也提供了这个功能。

观看视频,以深入了解容器化:

Docker 与现代容器时代

随着 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

使用 Kubernetes 进行容器编排

在一个系统中运行数十万个容器可能会让管理它们变得十分困难,需要借助一个编排管理解决方案。

此时,容器编排便有了用武之地;它可让公司在其整个生命周期中管理大量数据,从而提供:

  • 供应
  • 冗余
  • 运行状况监控
  • 资源分配
  • 扩展和负载均衡
  • 在物理主机之间移动

虽然存在其他容器编排平台(例如,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 (K8s) 已成为全球运行基于容器的工作负载时的主流容器编排工具。根据 CNCF 的一份报告9,Kubernetes 是全球第二大开源项目(仅次于 Linux),也是 71% 的财富 100 强公司的主要容器编排工具。

容器即服务 (CaaS) 是什么?

容器即服务 (CaaS) 是一种云计算服务,允许开发者管理和部署容器化应用程序。它使各种规模的企业都能访问可移植、可扩展的云解决方案。

CaaS 提供了一个基于云的平台,用户可以在其中简化基于容器的虚拟化和容器管理流程。CaaS 提供商提供了多种功能,包括(但不限于)容器运行时、编排层和持久存储管理。

基础架构即服务 (IaaS)、平台即服务 (PaaS) 和软件即服务 (SaaS) 类似,CaaS 也可通过即用即付定价模式从云服务提供商(例如 AWS、Google Cloud Services、IBM® Cloud、Microsoft Azure)获得,此定价模式让用户只需为他们使用的服务付费。

容器用例

组织利用容器支持以下内容:

微服务

容器小巧轻便,因而非常适合微服务架构;而在这些架构中,应用程序由众多松散耦合且可独立部署的小型服务组成。

DevOps

微服务架构与容器平台的组合是很多采用 DevOps 开发运维方法的开发和运营团队共同的基础。例如,容器支持 DevOps 开发运维管道,包括持续集成持续部署 (CI/CD) 实施。

混合云和多云

由于容器可在任何地方(笔记本电脑、本地与云环境中)一致地运行,因此它们是针对混合云多云场景的理想底层架构;而在这些场景中,组织会在多个不同的公有云以及自己的数据中心内开展运营。

应用程序现代化和迁移

应用程序现代化的最常用方法之一是将应用程序容器化,以便为云迁移做准备。

AI 和 ML 工作负载

容器化(即使用 Kubernetes 编排的 Docker 映像)能够让 DevOps 开发运维管道快速将人工智能 (AI)机器学习 (ML) 应用程序部署到云计算环境中。

生成式 AI

容器还提供了一种高效的方法,以部署和管理大型语言模型 (LLM),这些大型语言模型与生成式 AI 相关联,在与编排工具结合使用时可提供可移植性和可扩展性。此外,还可以将对 LLM 进行的更改快速打包到一个新的容器映像中,以加速开发和测试。

更广泛的容器生态系统:Istio 和 Knative

除 Kubernetes 以外,容器生态系统中最受欢迎的两个项目为 Istio 和 Knative。

Istio 服务网格

在开发人员使用容器构建和运行微服务时,管理问题不再局限于各个容器的生命周期注意事项,还涉及大量小型服务(通常被称为“服务网格”)如何相互连接和关联。使用 Istio,开发人员可以更轻松地应对与发现、流量、监控、安全性等方面相关的挑战。

Knative 和无服务器

Knative(发音为“kay-native”)是一个开源平台,为无服务器计算提供一个简单的入口,无服务器计算是一种云计算应用程序开发和执行模型,使开发人员能够构建和运行应用程序代码,而无需配置或管理服务器或后端基础架构。

无服务器并非部署在等待请求时处于空闲状态的持续代码实例,而是在需要时启动代码,并根据需求波动进行扩缩,然后在不使用时关闭代码。无服务器计算可防止浪费计算容量和电力,并降低成本,因为您只需在代码实际运行时付费。

容器安全性和治理

由于容器在混合云环境的软件开发和部署中发挥着重要作用,组织需要确保他们的容器化工作负载不受外部和内部安全威胁的影响。

容器可部署在任意位置,而这会在基于容器的环境周围形成新的攻击面。易受攻击的安全领域包括:容器映像、映像注册表、容器运行时、容器编排平台和主机操作系统。

首先,企业需要将容器安全性整合到他们的安全策略和整体战略中。此类策略必须包含安全最佳实践以及基于云的安全软件工具。这种整体方法的设计应当在容器的整个生命周期内保护容器化应用程序及其底层基础设施。

出色的安全实践包括零信任策略,此策略假设复杂网络的安全性始终面临着外部和内部威胁的风险。此外,容器还需要采用 DevSecOps 方法。DevSecOps 是一种应用程序开发实践,可以在软件开发生命周期的每个阶段(从初步设计到集成、测试、交付和部署)自动整合安全实践。

组织还需要使用正确的容器安全工具,以缓解风险。自动化安全解决方案包括配置管理、访问控制、恶意软件网络攻击扫描、网络分段、监控等等。

此外,还提供了一些软件工具,以确保容器化工作负载遵守合规性和监管标准,例如 GDPR、HIPAA 等等。

作者

Stephanie Susnjara

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

相关解决方案
IBM Instana Observability

利用 AI 和自动化的强大功能,主动解决整个应用程序堆栈中的问题。

深入了解 IBM Instana Observability
DevOps 解决方案

使用开发运维软件和工具,在多种设备和环境中构建、部署和管理云原生应用程序。

探索 DevOps 解决方案
云咨询服务

通过我们的云咨询服务持续实现应用现代化,加速业务敏捷性与增长——支持任意平台部署。

深入了解我们的云咨询服务
采取后续步骤

从 IBM Instana® 的主动问题检测到跨堆栈实时洞察,让云原生应用程序保持高可靠运行。

  1. 了解 IBM Instana
  2. 探索 DevOps 解决方案