但我不知道什么是容器

以下是容器在哪些方面非常像虚拟机,又在哪些方面非常不像虚拟机。
410 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

最近,我在一些会议和研讨会上谈论了 DevOps 中的安全问题——也称为“DevSecOps”*——我开始在讨论前先问一个简单的问题:“这里谁了解什么是容器?” 通常我没有看到很多人举手,**  所以我开始在深入探讨之前简要解释一下什么是容器***

需要明确的是:您可以在不使用容器的情况下进行 DevOps,并且您可以在不使用容器的情况下进行 DevSecOps。但是,容器非常适合 DevOps 方法——以及 DevSecOps,事实证明——即使在不使用容器的情况下也可以进行 DevOps,但我仍然假设大多数人会使用容器。

什么是容器?

几个月前,我和同事们开会,其中一位同事正在介绍容器。并非桌子旁的每个人都是该技术方面的专家,因此他从简单的开始。他说了一些类似这样的话:“Linux 内核源代码中没有提到容器。” 事实证明,在这个特定的群体中说这句话很危险,几秒钟之内,我的老板(坐在我旁边)和我都在下载最新的内核源代码 tarball,并计算单词“container”出现的准确次数。结果证明他的说法并不完全正确。为了让您了解情况,我刚刚在我笔记本电脑上的旧版本 (4.9.2) 上尝试了一下——结果证明该版本中有 15,273 行包含单词“container”。**** 我的老板和我有点得意地笑了笑,并确保在下一次休息时纠正了他。

我的同事想说——并且后来澄清了——容器的概念实际上并不作为 Linux 内核中的一个明确元素存在。换句话说,容器使用了 Linux 内核中的许多抽象、组件、工具和机制,但这些并没有什么特别之处;它们也可以用于其他目的。所以,根据 Linux 内核的说法,“没有容器这种东西。”

那么,什么是容器呢?嗯,我来自虚拟化——虚拟机监控器和虚拟机 (VM)——背景,在我看来,容器既非常像虚拟机,又非常不像虚拟机。我意识到这听起来可能没什么帮助,但请允许我解释一下。

容器在哪些方面像虚拟机?

容器 像 虚拟机的主要方式是它是一个执行单元。您将一些东西捆绑在一起——一个镜像——然后您可以在适当配置的主机平台上运行它。像虚拟机一样,它是在主机上的工作负载,并且像虚拟机一样,它受制于该主机。除了为工作负载提供完成其工作所需的资源(CPU 周期、网络、存储访问等)之外,主机还需要完成几项工作

  1. 相互保护工作负载,并确保恶意、受损或编写不良的工作负载不会影响任何其他工作负载的运行。
  2. 保护自身(主机)免受工作负载的影响,并确保恶意、受损或编写不良的工作负载不会影响主机的运行。

虚拟机和容器实现这种隔离的方式从根本上不同,虚拟机通过虚拟机监控器利用硬件功能进行隔离,而容器通过 Linux 内核提供的软件控制进行隔离。****** 这些控制围绕着各种“命名空间”,以确保一个容器看不到其他容器的文件、用户、网络连接等——也看不到主机的。这些可以通过 SELinux 等工具进行补充,这些工具为进一步隔离容器提供了能力控制。

容器在哪些方面不像虚拟机?

上面描述的问题是,如果您对虚拟机监控器有所了解,您可能会认为容器就像虚拟机一样,但它 真的 不是。

容器,首先******* 是一种打包格式。“什么?” 您说,“但您刚刚说它是被执行的东西。” 嗯,是的,但容器如此有趣的主要原因是,创建从中实例化容器的镜像非常容易,并且这些镜像通常比虚拟机的镜像小得多  。因此,它们占用很少的内存,并且可以非常非常快速地启动和停止。拥有一个只存在几分钟甚至几秒钟(好吧,如果您愿意,可以是毫秒)的容器是一个完全明智和可行的想法。对于虚拟机来说,则不然。

鉴于容器如此轻量级且易于替换,人们正在使用它们来创建微服务——从应用程序中拆分出来的最小组件,可以被一个或多个其他微服务使用,以构建您想要的任何东西。鉴于您计划仅将特定功能或服务所需的内容放入容器中,您现在可以自由地将其做得非常小,这意味着编写新的容器并丢弃旧的容器变得非常实用。我将在以后的文章中跟进这一点以及这可能对安全以及 DevSecOps 产生的一些影响。

希望这篇关于容器的介绍对您有所帮助,并且您有动力了解更多关于 DevSecOps 的信息。(如果您没有,那就假装有。)


* 我认为 SecDevOps 读起来很奇怪,而 DevOpsSec 倾向于被复数化,然后您就进入了一个 完全不同的主题。

** 我应该指出,这不仅仅是针对英国观众,他们比较保守,不喜欢引人注目。这种情况也发生在加拿大和美国观众身上,他们在这一点上有所不同。

*** 我将要谈论的是 Linux 容器。我知道这里有历史渊源,所以值得注意。以防有人吹毛求疵。

**** 如果您有兴趣,我使用了 grep -ir container linux-4.9.2 | wc -l*****

***** 公平地说,乍一看,许多这些用法与我们讨论的“Linux 容器”方式中的容器无关,而是指抽象概念,这些抽象概念可以说包含其他元素,因此在逻辑上被称为容器。

****** 有一些巧妙的方法可以将虚拟机和容器结合起来,以利用各自的优势。我今天不打算深入探讨这些。

******* 好吧,除了我们刚刚讨论的执行部分,显然。

本文最初发表于 Alice, Eve, and Bob——一个安全博客,经许可重新发布。

标签
User profile image.
自 1997 年左右以来,我一直从事开源工作,并且从那时起一直在家庭和工作中运行 (GNU) Linux 作为我的主要桌面:并非总是容易......  我是一名安全专家和架构师,Enarx 项目的联合创始人,目前是一家初创公司的 CEO,该公司在

评论已关闭。

© . All rights reserved.