概述
容器化是指将软件代码和所需的所有组件(例如库、框架和其他依赖项)打包在一起,让它们隔离在自己的"容器"中。
这样,容器内的软件或应用就可以在任何环境和任何基础架构上一致地移动和运行,不受该环境或基础架构的操作系统影响。容器就像是一个气泡(或者是应用周围的计算环境),把应用和周围环境隔离开来。它相当于是一个功能全面、便于移植的计算环境。
容器是取代在平台或操作系统上直接编写代码的一种替代方案,因为在这种旧的方式中,代码可能无法与新环境兼容,使得应用难以移动。如此就可能会产生漏洞、错误和故障,从而需要消耗更多时间进行修复,导致生产力降低和团队产生强烈的挫败感。
将应用打包装入可在平台和基础架构之间移动的容器后,只用把该容器移动到某个位置,应用就能在那里成功运行使用,因为容器中包含了成功运行应用所需的一切。
进程隔离的想法早已存在多年,但直到 2013 年 Docker 推出 Docker 引擎,业界才设立了使用容器的标准,配以方便开发人员使用的工具及通用的打包方法,此举加速了容器技术的采用。如今,开发人员可从一系列容器化平台和工具自由挑选,如 Podman、Buildah 和 Skopeo 等,它们全都支持 Docker 发起的开放式容器倡议标准。
好处
容器之所以具有"轻量级"或"可移植"的特性,是因为它们能够共享主机的操作系统内核,不需要为每个容器提供单独的操作系统,且允许应用在任何基础架构(裸机、云)上运行相同的操作系统,甚至在虚拟机(VM)中,有关详情请参见下一节。
同样,开发人员在一个主机环境中使用容器时,可以像在另一个主机环境中一样使用相同的工具,如此,在各个操作系统间开发和部署容器化应用就变得更加简单。
容器 vs 虚拟机
虚拟机(VM)是一种创建于物理硬件系统(位于外部或内部)、充当虚拟计算机系统的虚拟环境,它模拟出了自己的整套硬件,包括 CPU、内存、网络接口和存储器。
容器化和虚拟化的相似之处在于它们都允许应用完全隔离,以便在多个环境中运行。而它们的主要区别在于尺寸大小和可移植性。
虚拟机在两者中尺寸较大,通常以千兆字节为度量单位,且包含它们自己的操作系统,所以可以同时执行多个资源密集型功能。由于虚拟机的可用资源大大增加,因此它们可以抽象、分离、复制和模拟整个服务器、操作系统、台式机、数据库和网络。
容器则要小得多,通常以兆字节为度量单位,且其中仅包含应用及其运行环境。
容器 vs 微服务
容器通常被用来打包执行特定任务的单一功能,即所谓的微服务。微服务就是将应用的各个部分分解成更小、更专业化的服务。如此,开发人员就可以专注于应用的特定方面,而不用担心它会影响应用的整体性能。
这意味着,在实施更新或解决问题时,应用可以保持运行,从而更快地实现改进、测试和部署。
微服务和容器可以很好地协同工作,因为容器中的微服务具有容器的所有可移植性、兼容性和可扩展性。
容器编排
那么,如何管理所有这些容器?容器编排的作用就在于此。容器编排是指自动执行容器的部署、管理、扩展和联网。
Kubernetes 是一个开源容器编排平台,可帮助大规模地管理分布式、容器化的应用。只需告诉 Kubernetes 您希望在哪里运行软件,该平台就会负责执行部署和管理容器所需的几乎一切工作。
Kubernetes 最初是由 Google(该公司是 Linux 容器技术的早期贡献者之一)工程师开发和设计的,然后于 2015 年捐赠给了云原生计算基金会(CNCF)。因此,CNCF 是负责维护 Kubernetes 社区的实体组织,而志愿贡献者和管理员则负责 Kubernetes 的开发、维护和发布。
红帽是第一批与 Google 合作研发 Kubernetes 的公司之一,作为 Kubernetes 项目的第二大贡献者,我们早在这个项目启动之前就已参与其中。
为什么选择红帽来进行容器化?
红帽 OpenShift 是企业级的 Kubernetes。该软件产品中包含 Kubernetes 容器管理项目的组件,但增加了对大型公司而言非常重要的生产力和安全功能。
"OpenShift"是指从 OKD 开源项目(以前称为 OpenShift Origin)派生的下游容器编排技术。"红帽 OpenShift"是指由红帽打造的容器编排产品套件。红帽在各种产品中打包了 OpenShift 以及大量预配置组件,其中包括: