容器

menu icon

容器

本指南阐述了容器在云计算中的重要性,重点介绍了容器的核心优势,然后介绍了由相关技术(Docker、Kubernetes、Istio 和 Knative)组成的新兴生态系统。

什么是容器?

容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。

为此,容器利用操作系统 (OS) 虚拟化形式,这里会利用操作系统的功能(在 Linux 内核中,即名称空间和 cgroups 原语)来隔离进程,并控制这些进程有权访问的 CPU、内存和磁盘的数量。

容器小巧轻便、速度快且可移植;与虚拟机不同,容器不需要在每个实例中都包含访客操作系统,只需利用主机操作系统的功能和资源即可。

容器在几十年前就已出现在 FreeBSD Jails 和 AIX Workload Partitions 等版本中,但大多数现代开发人员都记得容器时代是始于 2013 年,因为 Docker 诞生于 2013 年。

容器与虚拟机 (VM)

可通过查看容器与传统虚拟机 (VM) 的不同之处来更全面地了解容器。 在传统的虚拟化(无论是在本地还是在云端)中是使用管理程序来虚拟化物理硬件。 每个虚拟机都包含一个访客操作系统、操作系统运行所需硬件的一个虚拟副本以及一个应用及其关联的库和依赖项。

容器不是要虚拟化底层硬件,而是要虚拟化操作系统(通常是 Linux),因此每个单独的容器包含应用程序及其库和依赖项。 由于缺少访客操作系统,容器才如此轻量,因此速度快且可移植。

若要更深入地了解比较结果,请查看“容器与虚拟机:有何区别?

容器的优势

尤其是与虚拟机相比,容器的主要优势在于它提供了一个抽象层,这使得容器小巧轻便且可移植。

  • 轻量级:容器会共享机器操作系统内核,由于无需在每个应用程序中包含完整的操作系统实例,因此容器文件较小且易于访问资源。 尤其是与虚拟机相比,容器可谓小巧轻便,这意味着容器可以快速启动并更好地支持横向扩展的云原生应用程序。
  • 可移植且与平台无关:容器会携带其所有依赖项,这意味着软件一旦编写完毕就可以运行,而无需在笔记本电脑、云和本地计算环境中对其进行重新配置。
  • 支持现代开发和架构:由于兼具部署可移植性/跨平台一致性以及小巧轻便的特点,因此容器非常适用于现代开发和应用程序模式(例如 DevOps无服务器微服务),这些模式已构建为小增量的常规代码部署。
  • 提高利用率: 与虚拟机一样,容器也可以让开发人员和运营商提高物理计算机的 CPU 和内存利用率。 容器比虚拟机更胜一筹的是,由于它们支持微服务架构,所以可以更精细地部署和扩展应用程序组件,这取代了以往因为单个组件难以处理负载而必须扩展整个应用程序的做法。

在最近的 IBM 调查 (PDF, 1.4MB) 中,开发人员和 IT 主管报告了容器带来的许多其他优势。 使用下面的交互式工具探索容器:

下载完整报告企业中的容器(PDF, 1.4MB)

容器用例

容器正变得越来越重要,尤其是在云环境中。 许多组织甚至考虑使用容器取代虚拟机,将其用作应用程序和工作负载的通用计算平台。 但在这个非常广泛的范围内,有一些关键用例与容器特别相关。

  • 微服务: 容器小巧轻便,因此非常适用于微服务架构,其中应用程序由许多松散耦合且可独立部署的较小服务构成。
  • DevOps: 微服务(作为架构)与容器(作为平台)的组合为许多使用 DevOps 构建、交付和运行软件的团队提供了一个共同的基础。
  • 混合和多云: 由于可以随时随地(不论是笔记本电脑、本地还是云环境)始终如一地运行容器,因此它们是混合云多云场景的理想底层架构,在这些场景中,组织发现可以使用自己的数据中心在包含多个公共云的混合环境中运行应用程序。
  • 应用程序现代化和迁移: 应用程序现代化的最常见方法之一是将它们容器化,以便可以将它们迁移到云端

容器化

需要采用不同的方式来设计和打包软件以便利用容器 - 这个过程通常称为容器化

将应用程序容器化时,该过程包括将应用程序与其相关的环境变量、配置文件、库和软件依赖项打包在一起。 这会生成一个容器映像,此映像随后可以在容器平台上运行。 有关更多信息,请观看视频“解释容器化” (08:09) :

使用 Kubernetes 的容器编排

随着公司开始采用容器(通常是现代云原生架构的一部分),单个容器的简单性开始与跨分布式系统管理数百(甚至数千)个容器的复杂性发生冲突。

容器编排平台应运而生,这种平台可以在整个生命周期内管理大量的容器,包括:

  • 供应
  • 冗余度
  • 健康监测
  • 资源分配
  • 缩放和负载均衡
  • 在物理主机之间移动

虽然创建了许多容器编排平台(例如 Apache Mesos、Nomad 和 Docker Swarm)来帮助解决这些挑战,但 Kubernetes(一个由 Google 于 2014 年推出的开源项目)迅速成为最受欢迎的容器编排平台,并且是大多数行业的标配容器编排平台。

Kubernetes 使开发人员和运营商能够通过 YAML 文件声明整个容器环境的所需状态,然后由 Kubernetes 来完成建立和维护该状态的所有艰苦工作,包括部署给定应用程序或工作负载的指定数量的实例、在发生故障时重新启动该应用程序、负载平衡、自动扩展、零停机部署等等。

要了解有关 Kubernetes 的更多信息,Sai Vennam 在以下视频 (10:59) 中简要介绍了 Kubernetes:

 

Kubernetes 现在由云原生计算基金会 (CNCF) 运营,该基金会是 Linux 基金会赞助下的一个与供应商无关的组织。

Istio、Knative 和不断壮大的容器生态系统

随着容器作为打包和运行应用程序的流行方式继续发展,旨在加强和扩展生产用例的工具和项目生态系统也在不断壮大。 除了 Kubernetes 外,容器生态系统中还有两个最受欢迎的项目,那就是 Istio 和 Knative。

Istio

随着开发人员利用容器来构建和运行微服务架构,管理工作不仅要考虑单个容器的生命周期,还要考虑大量小型服务(通常称为“服务网格”)相互连接和关联的方式。 Istio 旨在让开发人员更轻松地管理与发现、流量、监控、安全等相关的挑战。 有关 Istio 的更多信息,请参阅“什么是 Istio?”并观看 Istio 讲解视频 (05:06):

 

Knative

无服务器架构也越来越受欢迎,尤其是在云原生社区中。 Knative 的巨大价值在于它能够将容器化服务部署为无服务器功能

无服务器功能可以“缩放到零”,而不是一直运行并在需要时作出响应(就像服务器一样),这意味着除非被调用,否则它根本不会运行。 该模型在应用于数万个容器时可以极大地节省计算能力。

有关 Knative 的更多信息,请观看“什么是 Knative?”(07:58) 视频:

容器和 IBM Cloud

IBM Cloud 容器服务基于开源技术构建,可以促进和加快您的云之旅。 使用持续集成和持续交付 (CI/CD) 工具构建容器化应用程序。 使用受管的 Red Hat OpenShiftKubernetes 服务来编排容器。 使用 IBM Cloud Paks 中的容器化 IBM 中间件和开源组件,将现有应用程序现代化。

了解有关 IBM Cloud 上的容器的更多信息。

注册 IBMid 并创建 IBM Cloud 帐户