容器

什么是 Linux 容器?

Linux® 容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

什么是容器

更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。容器可以确保您的应用拥有必需的配置和文件,使得这些应用能够在从开发到测试、再到生产的整个流程中顺利运行,而不出现任何不良问题。这样可以避免危机,做到皆大欢喜。

虽然这只是简化的示例,但在需要很高的可移植性、可配置性和隔离的情况下,我们可以利用 Linux 容器通过很多方式解决难题。无论基础架构是在企业内部还是在云端,或者混合使用两者,容器都能满足您的需求。

容器不就是虚拟化吗?

是,但也不竟然。我们用一种简单方式来思考一下:

  • 虚拟化使得许多操作系统可同时在单个系统上运行。
  • 容器则可共享同一个操作系统内核,将应用进程与系统其他部分隔离开。

虚拟化与容器

这意味着什么?首先,让多个操作系统在单个虚拟机监控程序上运行以实现虚拟化,并不能达成和使用容器同等的轻量级效果。事实上,在仅拥有容量有限的有限资源时,您需要能够可以进行密集部署的轻量级应用。Linux 容器可从单个操作系统运行,在所有容器中共享该操作系统,因此应用和服务能够保持轻量级,并行快速运行。


容器发展简史

“容器的演变”下载按钮

我们现在称为容器技术的概念最初出现在 2000 年,当时称为 FreeBSD jail,这种技术可将 FreeBSD 系统分区为多个子系统(也称为 Jail)。Jail 是作为安全环境而开发的,系统管理员可与企业内部或外部的多个用户共享这些 Jail。Jail 的目的是让进程在经过修改的 chroot 环境中创建,而不会脱离和影响整个系统 — 在 chroot 环境中,对文件系统、网络和用户的访问都实现了虚拟化。尽管 Jail 在实施方面存在局限性,但最终人们找到了脱离这种隔离环境的方法。

但这个概念非常有吸引力。

2001 年,通过 Jacques Gélinas 的 VServer 项目,隔离环境的实施进入了 Linux 领域。正如 Gélinas 所说,这项工作的目的是“在高度独立且安全的单一环境中运行多个通用 Linux 服务器 [sic]。” 在完成了这项针对 Linux 中多个受控制用户空间的基础性工作后,Linux 容器开始逐渐成形并最终发展成了现在的模样。

容器开始具有实用性

很快,更多技术结合在一起,让这种隔离方法从构想变为现实。控制组 (cgroups) 是一项内核功能,能够控制和限制一个进程或多组进程的资源使用。而 systemd 初始化系统可设置用户空间,并且管理它们的进程,cgroups 使用该系统来更严密地控制这些隔离进程。这两种技术在增加对 Linux 的整体控制的同时,也成为了保持环境隔离的重要框架。

用户名称空间的改进推动了容器的进一步发展。用户名称空间“使得用户和组 ID 可以按名称空间进行映射。对于容器而言,这意味着用户和组可以在容器内部拥有执行某些操作的特权,而在容器外部则没有这种特权。” 这类似于 Jail 概念,但它实现了进一步的进程隔离,从而增加了安全性,而不再是 Jail 的修改环境的概念。

Linux 容器项目 (LXC) 还添加了用户急需的一些工具、模板、库和语言绑定,从而推动了这些进步,进而改善了使用容器的用户体验。

进入 Docker 技术时代

2008 年,Docker 公司凭借与公司同名的容器技术通过 dotCloud 登上了舞台。Docker 技术将 LXC 工作与经过改进的开发人员工具结合在一起,从而提高了容器的用户友好度。Docker 是一种开源技术,也是当前最广为人知的、用于部署和管理 Linux 容器的项目和方法。

当前,红帽和 Docker 等公司都是开放容器计划 (OCI) 的成员,共同为容器技术的开放行业标准化而努力。


标准化和开放容器计划

2015 年启动的开放容器计划 (OCI) 是 Linux 基金会的一部分,旨在“创建有关容器格式和运行库的开放行业标准”。该项目的重点是确定和设置相关技术规范,当前包括两种规范:运行时和镜像。

运行时规范设定了有关以下方面的开放标准:文件系统捆绑、容器内的支持文件和构件的结构、以及如何通过相应的运行时来解开捆绑。基本上,规范存在的目的就是确保容器能够按照预想的方式工作,且所有支持的资源均可用,并位于正确的位置。

OCI 的镜像规范定义了创建容器镜像的方法。这个创建过程的输出包括“镜像清单、文件系统序列化、镜像配置”。

这些规范共同定义了容器镜像的内容及其依赖项、环境、参数等镜像正常运行的必需条件。


容器是操作系统层虚拟化特征的一种抽象。

Linux 容器是我们开发、部署和管理应用方式的又一次飞跃。Linux 容器镜像提供了可移植性和版本控制,确保能够在开发人员的笔记本电脑上运行的应用,同样也能在生产环境中正常运行。

运行 Linux 容器消耗的资源少于虚拟机,但在很大程度上保持了应用隔离,而且它作为大型应用的一部分更加易于管理。

Linux 容器的价值在于它能加速开发并满足新出现的业务需求,而并非用于完成这些工作的软件。不要认为容器只限于运行单个应用:您可以使用容器来运行应用或服务的多个部分。而且,您可以使用其他技术(如 Kubernetes)让容器化应用实现自动化并对这些应用进行编排。由于容器托管了应用逻辑、运行时和依赖项,因此您的容器可以包括所有这一切,或者也可以构建一个应用,其中包含多个用作微服务的容器。


生产环境中的容器

借助容器,您可以更加快速地向客户交付软件和应用。但这意味着要在生产环境中使用容器。这还意味着要在这些容器上运行更多进程。

幸运的是,红帽随时都能为您提供相关帮助。长久以来,红帽与开源社区一直在协同合作,以求让容器等技术变得安全、稳定可靠。这是我们的使命。我们同时为这些技术提供相应支持。所以,如果您需要帮助,请随时联系我们。

红帽技术旨在助您排除所有不确定因素,确保您正确使用容器。无论您是想为团队提供容器化开发平台、在一流操作系统上运行容器基础架构,还是想为容器生成的大量数据寻找适合的存储解决方案,红帽解决方案都能满足您的独特需求。

容器潜力巨大