从OpenShift博客交叉发布。容器是Linux。在过去20年里彻底改变了数据中心的操作系统现在的目标是彻底改变我们在云中打包、部署和管理应用程序的方式。当然,你会期待一个红帽人会这么说,但事实不言而喻。随着越来越多的组织意识到它们可以为如何管理应用程序和基础设施提供好处,人们对容器技术的兴趣也在持续增长。但很容易在所有的炒作中迷失方向,忘记容器的真正含义。归根结底,容器是Linux的一个特性。十多年来,容器一直是Linux操作系统的一部分,在UNIX中甚至可以追溯到更早。这就是为什么,尽管最近引入了Windows容器,但我们看到的大多数容器实际上都是Linux容器。这也意味着如果您正在部署容器,您的Linux选择非常重要,我们以前已经讨论过这一点,包括去年在Red Hat峰会上的讨论。随着我们为2017红帽峰会做准备,在接下来的几周里,您可以期待从我们那里听到更多关于这方面的消息,更重要的是,您会从今天部署生产中的容器的企业客户那里听到更多消息。因此,当我们说容器是Linux时,让我们来分析一下这实际上意味着什么,以及为什么这对您来说很重要。容器是Linux Linux容器只不过是在Linux上运行的一个进程。它与其他容器化进程共享一个主机内核。那么,究竟是什么让这个过程成为一个“容器”呢?首先,使用内核名称空间将每个容器化进程与运行在同一Linux主机上的其他进程隔离。内核名称空间为容器进程的运行提供了一个虚拟世界。例如,“PID”名称空间导致容器化进程只能看到该容器内的其他进程,而不能看到来自共享主机上其他容器的进程。内核功能(如删除功能、只读挂载和seccomp)提供了额外的安全隔离。在Red Hat Enterprise Linux等发行版中,SELinux提供了额外的文件系统安全隔离。这种隔离有助于确保一个容器无法利用其他容器或关闭底层主机。其次,每个容器进程消耗的资源(内存、CPU、I/O等)。使用Linux控制组(或“cgroup”)被限制在指定的限制内。通过避免一个容器过度消耗Linux主机资源并使其他容器挨饿,这有助于消除嘈杂的邻居问题。这种隔离容器化进程和限制其消耗的资源的能力使多个应用程序容器能够在共享的Linux主机上更安全地运行。隔离和资源限制的组合使Linux进程成为Linux容器。换句话说,容器是Linux。让我们来探讨一下这其中的一些含义。容器安全就是Linux安全一旦你了解了容器是如何工作的,就很容易理解容器安全就是Linux安全。多个容器在共享主机上安全运行的能力仅与内核在容器和底层主机操作系统之间提供多租户隔离的能力一样好。这包括Linux内核名称空间和其他安全特性,如由内核和您选择的Linux主机发行版提供的SELinux,以及Linux发行版本身的安全性和可靠性。归根结底,这意味着您的容器只与它们在其上运行的Linux主机一样安全。另一个重要因素是确保容器中运行的内容是可信的。Docker开源项目为不可变的容器图像引入了分层打包格式,但是用户仍然需要确保他们正在运行的图像是安全的。每个容器映像由一个基本的Linux用户空间层和其他层组成,具体取决于应用程序。例如,Red Hat为Red Hat Enterprise Linux 7和Red Hat Enterprise Linux 6提供基本映像,并通过我们的认证容器注册为各种语言运行时、中间件、数据库等提供大量认证映像。RedHat雇佣了大量工程师,他们将来自已知源代码的图像内容打包,并设法确保这些内容没有漏洞。Red Hat还提供安全监控,因此当检测到新问题时,会识别修复程序并发布更新的容器映像,因此客户可以反过来更新依赖它们的应用程序。容器性能就是Linux性能也很容易看出容器性能是如何与Linux性能联系在一起的。容器镜像是用于实例化容器实例的分层Linux文件系统。所使用的Linux文件系统(OverlayFS、Device Mapper、BTRFS、AUFS等)的选择会影响高效构建、存储和运行这些映像的能力。