容器是软件的可执行单元,它采用通用方式封装了应用程序代码及其库和依赖项,因此可以随时随地运行容器(无论是在桌面、传统 IT 还是云端)。
为此,容器利用一种操作系统 (OS) 虚拟化的形式,进而可以利用操作系统内核的功能(例如 Linux 命名空间和 cgroups、Windows 孤岛和作业对象)来隔离进程,并控制进程可以访问的 CPU、内存和磁盘的数量。
容器小巧轻便、速度快且可移植;与虚拟机不同,容器不需要在每个实例中都包含访客操作系统,只需利用主机操作系统的功能和资源。
容器在几十年前就已出现在 FreeBSD Jails 和 AIX Workload Partitions 等版本中,但大多数现代开发人员都记得容器时代是始于 2013 年,因为 Docker 诞生于 2013 年。
为了更全面地了解容器, 可以看看它与传统 虚拟机 (VM) 的不同之处。 在传统的 虚拟化环境中,无论是在本地还是云端,都使用 虚拟机管理程序 来虚拟化物理硬件。 每个虚拟机都包含一个访客操作系统、操作系统运行所需硬件的一个虚拟副本以及一个应用及其关联的库和依赖项。
容器不是要虚拟化底层硬件,而是要虚拟化操作系统(通常是 Linux),因此每个单独的容器 只 包含应用程序及其库和依赖项。 由于缺少访客操作系统,容器才如此轻量,因此速度快且可移植。
如需深入了解比较结果,请参阅“容器与虚拟机:有何区别?”
尤其是与虚拟机相比,容器的主要优势在于它提供了一个抽象层,这使得容器小巧轻便且可移植。 他们的主要优势包括:
轻量: 容器会共享机器操作系统内核,由于无需在每个应用程序中包含完整的操作系统实例,因此容器文件较小且易于访问资源。 容器体积小,尤其是与虚拟机相比,这意味着容器可以快速启动并更好地支持横向扩展的 云原生 应用程序。
可移植且独立于平台: 容器会携带其所有依赖项,这意味着软件一旦编写完毕就可以运行,而无需在笔记本电脑、云和本地计算环境中对其进行重新配置。
支持现代开发和架构: 由于兼具部署可移植性/跨平台一致性以及小巧轻便的特点,容器非常适用于现代开发和应用程序模式(例如 DevOps、 无服务器 和 微服务),这些模式已构建为小增量的常规代码部署。
提高利用率: 与虚拟机一样,容器也可以让开发人员和运营商提高物理计算机的 CPU 和内存利用率。 容器比虚拟机更胜一筹的是,由于它们支持微服务架构,所以可以更精细地部署和扩展应用程序组件,这取代了以往因为单个组件难以处理负载而必须扩展整个应用程序的做法。
在 最近的一项 IBM 调研 (PDF, 1.4 MB) 中,开发人员和 IT 主管报告了使用容器的许多其他好处。
下载完整报告: “企业中的容器” (PDF, 1.4 MB)
容器正变得越来越重要,尤其是在云环境中。 许多组织甚至考虑使用容器取代虚拟机,将其用作应用程序和工作负载的通用计算平台。 但在这个非常广泛的范围内,有一些关键用例与容器特别相关。
需要采用不同的方式来设计和打包软件以便利用容器 - 这个过程通常称为 容器化。
将应用程序容器化时,该过程包括将应用程序与其相关的环境变量、配置文件、库和软件依赖项打包在一起。 这会生成一个容器映像,此映像随后可以在容器平台上运行。
使用 Kubernetes 的容器编排
随着企业开始将容器纳入现代云原生架构,简单的单个容器开始与复杂的跨分布式系统管理数百乃至数千容器发生冲突。
容器编排 应运而生,这种技术可以在整个生命周期内管理大量的容器,包括:
虽然创建了许多容器编排平台(例如 Apache Mesos、Nomad 和 Docker Swarm),但 Kubernetes (一个由 Google 于 2014 年推出的开源项目) 迅速成为最受欢迎的容器编排平台,并且是大多数行业的标配容器编排平台。
Kubernetes 使开发人员和运营商能够通过 YAML 文件 声明整个容器环境所需的状态,然后由 Kubernetes 来完成建立和维护该状态的所有处理工作,包括部署 给定 应用程序或工作负载的指定数量 的 实例、在发生故障时重新启动该应用程序、负载均衡、自动扩展、零停机部署 等等。
Kubernetes 现在由云原生计算基金会 (CNCF) 运营,该基金会是 Linux 基金会赞助下的一个与供应商无关的组织。
下面的视频概述了 Kubernetes 的工作原理:
随着容器作为打包和运行应用程序的流行方式继续发展,用于适应和扩展生产用例的工具和项目生态系统也在不断壮大。 除了 Kubernetes 外,容器生态系统中还有两个最受欢迎的项目,那就是 Istio 和 Knative。
Istio
随着开发人员利用容器来构建和运行微服务架构,管理工作不仅要考虑单个容器的生命周期,还要考虑大量小型服务(通常称为“服务网格”)相互连接和关联的方式。 Istio 旨在让开发人员更轻松地管理与发现、流量、监控、安全等相关的挑战。
Knative
无服务器架构也越来越受欢迎,尤其是在云原生社区中。 例如,Knative 在部署容器化服务 无服务器功能方面提供了巨大的价值。
无服务器功能可以“缩放到零”,而不是一直运行并在需要时作出响应(就像服务器一样),这意味着除非被调用,否则它根本不会运行。 该模型在应用于数万个容器时可以极大地节省计算能力。
下面的视频介绍了关于 Knative 的更多信息:
Red Hat OpenShift on IBM Cloud 在公有云和混合云环境中使用 OpenShift,着力提高运行速度,增强市场响应能力,改善可扩展性和可靠性。
借助 IBM Cloud Satellite,您可以随时随地在本地、边缘和公有云环境中启动一致的云服务。
以无服务器工作负载的形式运行容器映像、批处理作业或源代码,而无需调整规模、部署、联网或扩展。
IBM Cloud Container Registry 为提供专用注册表,供您管理并监控映像,解决安全问题。