容器如何工作:OverlayFS

你可以运行一条 mount 咒语,而实际上并没有做任何与容器相关的其他事情,看看叠加层是如何工作的!

今天早上,我为未来潜在容器杂志画了一幅 OverlayFS 的漫画,我对这个主题感到兴奋,想写一篇关于它的博客来提供更多详细信息。

容器如何工作:OverlayFS

容器镜像很大

容器镜像可能会很大(尽管有些很小,例如 alpine linux 才 2.5MB)。Ubuntu 16.04 约为 27 MB,Anaconda Python 发行版为 800MB 至 1.5GB

你以镜像启动的每个容器都是原始空白状态,仿佛它只是为使用容器而复制的一份镜像拷贝一样。但是对于大的容器镜像,像 800MB 的 Anaconda 镜像,复制一份拷贝既浪费磁盘空间也很慢。因此 Docker 不会复制,而是采用叠加

叠加如何工作

OverlayFS,也被称为 联合文件系统联合挂载,它可让你使用 2 个目录挂载文件系统:“下层”目录和“上层”目录。

基本上:

  • 文件系统的下层目录是只读的
  • 文件系统的上层目录可以读写

当进程“读取”文件时,OverlayFS 文件系统驱动将在上层目录中查找并从该目录中读取文件(如果存在)。否则,它将在下层目录中查找。

当进程“写入”文件时,OverlayFS 会将其写入上层目录。

让我们使用 mount 制造一个叠加层!

这有点抽象,所以让我们制作一个 OverlayFS 并尝试一下!这将只包含一些文件:我将创建上、下层目录,以及用来挂载合并的文件系统的 merged 目录:


$ mkdir upper lower merged work
$ echo "I'm from lower!" > lower/in_lower.txt
$ echo "I'm from upper!" > upper/in_upper.txt
$ # `in_both` is in both directories
$ echo "I'm from lower!" > lower/in_both.txt
$ echo "I'm from upper!" > upper/in_both.txt

合并上层目录和下层目录非常容易:我们可以通过 mount 来完成!


$ sudo mount -t overlay overlay
-o lowerdir=/home/bork/test/lower,upperdir=/home/bork/test/upper,workdir=/home/bork/test/work
/home/bork/test/merged

在执行此操作时,我不断收到一条非常烦人的错误消息,内容为:mount: /home/bork/test/merged: special device overlay does not exist.。这条消息是错误的,实际上只是意味着我指定的一个目录缺失(我写成了 ~/test/merged,但它没有被展开)。

让我们尝试从 OverlayFS 中读取其中一个文件!文件 in_both.txt 同时存在于 lower/upper/ 中,因此应从 upper/ 目录中读取该文件。


$ cat merged/in_both.txt
"I'm from upper!

可以成功!

目录的内容就是我们所期望的:


find lower/ upper/ merged/
lower/
lower/in_lower.txt
lower/in_both.txt
upper/
upper/in_upper.txt
upper/in_both.txt
merged/
merged/in_lower.txt
merged/in_both.txt
merged/in_upper.txt

创建新文件时会发生什么?


$ echo 'new file' > merged/new_file
$ ls -l */new_file
-rw-r--r-- 1 bork bork 9 Nov 18 14:24 merged/new_file
-rw-r--r-- 1 bork bork 9 Nov 18 14:24 upper/new_file

这是有作用的,新文件会在 upper 目录创建。

删除文件时会发生什么?

读写似乎很简单。但是删除会发生什么?开始试试!


$ rm merged/in_both.txt

发生了什么?让我们用 ls 看下:

“`
ls -l upper/inboth.txt lower/lower1.txt merged/lower1.txt
ls: cannot access ‘merged/in
both.txt’: No such file or directory
-rw-r–r– 1 bork bork 6 Nov 18 14:09 lower/in_both.txt
c

via: https://jvns.ca/blog/2019/11/18/how-containers-work–overlayfs/

作者:Julia Evans 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2019/11/23/%e5%ae%b9%e5%99%a8%e5%a6%82%e4%bd%95%e5%b7%a5%e4%bd%9c%ef%bc%9aoverlayfs/

Like (0)
eason的头像eason
Previous 2019年11月23日
Next 2019年11月24日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信