公司做网站的法律依据,网页框架图,页面设计布局有哪些,北京微网站建设设计服务公司引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单#xff0c;同时又非常强大。在今天的帖子[1]中#xf… 引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单同时又非常强大。在今天的帖子[1]中我将解释什么是层以及它们的概念性工作原理。 Snapshots 在容器可以运行之前它需要一个文件系统来挂载。本质上它需要一个目录其中包含所有需要可用的文件。压缩的层文件包含文件系统的组成部分但它们不能直接挂载和使用。相反它们需要被解压并组织成一个文件系统。这个解压后的目录被称为快照(snapshots)。 创建快照的过程与构建镜像相反。它首先通过下载清单并构建一个要下载的层列表开始。对于每个层会创建一个包含层父目录内容的目录。这个目录被称为活动快照。接下来差异应用器负责解压压缩的层文件并将更改应用到活动快照上。生成的目录随后被称为提交快照。最终的提交快照是作为容器文件系统挂载的那一个。 使用我们之前的例子 初始层FROM scratch意味着我们可以从下一层和一个空目录开始。没有父层。 创建了一个 layer2 的目录。这个空目录现在是一个活动快照。文件 layer2.tar.gz 被下载、验证通过比较摘要和文件名并解压到目录中。结果是包含 /work/message.txt 的目录。这是第一个提交快照。 创建了一个 layer3 的目录并将 layer2 的内容复制进去。这是一个新的活动快照。文件 layer3.tar.gz 被下载、验证并解压。结果是包含 /work/message.txt 和 /work/content.txt 的目录。现在这是第二个提交快照。 创建了一个 layer4 的目录并将 layer3 的内容复制进去。文件 layer4.tar.gz 被下载、验证并解压。差异应用器识别到 whiteout 文件/work/.wh.message.txt并删除 /work/message.txt。这只剩下 /work/content.txt。这是第三个提交快照。 由于 layer4 是最后一层它是容器的基础。为了使其能够支持读写操作创建了一个新的快照目录并将 layer4 的内容复制进去。这个目录被挂载为容器的文件系统。运行中的容器所做的任何更改都将发生在这个目录中。 如果这些目录中的任何一个已经存在这表明另一个镜像有相同的依赖关系。因此引擎可以跳过下载和差异应用器。它可以直接使用该层。在实践中这些目录和文件的命名都是基于内容的摘要以便于识别。例如一组快照可能看起来像这样 /var/path/to/snapshots/blobs└─ sha256 ├─ 635944d2044d0a54d01385271ebe96ec18b26791eb8b85790974da36a452cc5c ├─ 9de59f6b211510bd59d745a5e49d7aa0db263deedc822005ed388f8d55227fc1 ├─ fb0624e7b7cb9c912f952dd30833fb2fe1109ffdbcc80d995781f47bd1b4017f └─ fb124ec4f943662ecf7aac45a43b096d316f1a6833548ec802226c7b406154e9 实际的快照系统支持插件这些插件可以改善一些这些行为。例如它允许快照预先组合和解压加快了这一过程。这允许快照被存储在远程位置。它还允许进行特殊优化比如按需下载所需的文件和层。 Overlays 虽然挂载起来很容易但我们刚刚描述的快照方法会产生大量的文件变动和许多重复文件。这会减慢第一次启动容器的过程并浪费空间。幸运的是这是容器化过程中可以由文件系统处理的众多方面之一。Linux 原生支持将目录作为覆盖层挂载为我们实现了大部分过程。 在 Linux 中或者以 --privileged 或 --cap-addSYS_ADMIN 运行的 Linux 容器中 创建 tmpfs 挂载基于内存的文件系统将用于探索覆盖过程 mkdir /tmp/overlaymount -t tmpfs tmpfs /tmp/overlay 为我们的流程创建目录。我们将使用 lower 作为下父层使用 upper 作为上子层作为文件系统的工作目录并合并以包含合并的文件系统。 mkdir /tmp/overlay/{lower,upper,work,merged} 为实验创建一些文件。或者您也可以在 upper 中添加文件。 cd /tmp/overlayecho hello lower/hello.txtecho Im only here for a moment lower/delete-me.txtecho message upper/upper-message.txt 将这些目录安装为覆盖类型文件系统。这将在合并目录中创建一个新的文件系统其中包含下层目录和上层目录的组合内容。工作目录将用于跟踪文件系统的更改。 mount -t overlay overlay -o lowerdirlower,upperdirupper,workdirwork merged 探索文件系统。您会注意到 merged 包含 upper 和 lower 的组合内容。然后进行一些更改 rm -rf merged/delete-me.txtecho Im new merged/new.txtecho world merged/hello.txt 正如预期的那样delete-me.txt 将从合并中删除并在同一目录中创建一个新文件 new.txt。如果你对目录进行树化你会看到一些有趣的东西 |-- lower| |-- delete-me.txt| -- hello.txt|-- merged| |-- hello.txt| |-- new.txt| -- upper-message.txt|-- upper| |-- delete-me.txt| |-- hello.txt| |-- new.txt| -- upper-message.txt 运行 ls -l upper 显示 total 12c--------- 2 root root 0, 0 Jan 20 00:17 delete-me.txt-rw-r--r-- 1 root root 12 Jan 20 00:20 hello.txt-rw-r--r-- 1 root root 8 Jan 20 00:17 new.txt-rw-r--r-- 1 root root 8 Jan 20 00:17 upper-message.txt 虽然合并显示了我们更改的效果上层作为父层存储更改的方式与我们手册过程中的例子类似。它包含了新文件 new.txt 和修改过的 hello.txt。它还创建了一个 whiteout 文件。对于覆盖文件系统来说这涉及到用一个字符设备和一个 0, 0 设备号替换文件。简而言之它拥有我们打包目录所需的一切 你可以看到这种方法也可以用来实现快照系统。挂载命令可以原生地接受一个冒号 (:) 分隔的 lowerdir 路径列表所有这些路径都被合并到一个单一的文件系统中。这是现代容器的本质——容器是使用操作系统的原生特性组合而成的。 Reference [1] Source: https://www.kenmuse.com/blog/understanding-container-image-layers/ 本文由 mdnice 多平台发布