容器底层-UnionFS 工作原理-AUFS 和 Docker 实现

本文详细介绍了AUFS(Advanced UnionFS)的工作原理,包括其示例、特性以及性能表现。AUFS是Docker早期采用的UnionFS实现之一,允许将多个目录合并成一个可读写的视图。文章还探讨了AUFS的branch、whiteout机制以及文件权限。此外,文章还讨论了Docker如何利用UnionFS实现分层镜像,特别提到了overlay2作为替代的文件系统,并解释了其与AUFS的相似之处。最后,作者总结了容器镜像的重要性,强调了它的一致性和空间效率,以及在软件发布方式中的潜在影响。
摘要由CSDN通过智能技术生成

AUFS 

AUFS 是一种 Union File System,Union File System 就是把不同物理位置的目录合并 mount 到同一个目录中。比如可以把一张 CD/DVD 和一个硬盘目录给联合 mount 在一起,然后就可以对只读的 CD/DVD 上的文件进行修改,当然修改的文件是存于硬盘上的目录里。

AUFS 一开始叫 Another UnionFS,后来又叫 Alternative UnionFS,最后直接改为 Advance UnionFS。它是对 Linux 原生 UnionFS 的重写和改进。但是无论怎么改,它就是进不了 Linux 的主线。但是,我们可以在 Ubuntu 和 Debian 这些发行版上使用它。

AUFS 示例

那么 AUFS 的效果到底是怎么样的呢?下面根据耗子叔博客中的例子来演示一下。

  • 首先我们建立两个目录 ./fruits./vegetables,并在目录中放入一些文件。

  • 之后我们以 AUFS 的方式将这两个目录同时 mount 到 ./mnt 目录中。我们可以看到 ./mnt 目录下有三个文件:apple、carrots、tomato,相当于 ./fruits./vegetables 这两个目录被 union 到了 ./mnt 目录。

    mount -t aufs -o dirs=./fruits:./vegetables none ./mnt/
    
  • 接下去我们修改 ./mnt/apple 这个文件的内容,可以看到 ./fruits/apple 的内容也被修改了。

  • 再接下去我们修改 ./mnt/carrots 这个文件的内容,但是我们可以看到 ./vegetables/carrots 文件的内容并没有改变,反而是 ./fruits 目录中多出了 carrots 文件,这个内容跟我们修改的内容是一样。

    这个主要是因为在 mount aufs 命令中,我们并没有指定 fruits 和 vegetables 的目录权限。那么,默认上来说,命令行第一个(最左边)的目录是可读可写的,后面的都是可读的。

    假设修改一开始的 mount aufs 命令如下,那么上述修改 ./mnt/carrots 文件时, ./vegetables/carrots 这个文件才会被改变。

    mount -t aufs -o dirs=./fruits=rw:./vegetables=rw none ./mnt
    
  • 假如我上面的两个目录都配置为可读可写,那修改 ./mnt/tomato 这个文件的内容,影响到的其实是 ./fruits 这个目录下的。可见如果有重复的文件名,在 mount  命令中,越前面的目录中的文件的优先级就越高,也就是会被先改。

AUFS 特性

上述只阐述了简单的例子。实际上,AUFS 有所有 UnionFS 的特性,它可以把多个目录合并成同一个目录;并且为每个需要合并的目录指定相应的权限;实时地添加、删除、修改已经被 mount 好的目录;还能在多个可写的目录(分支)间实现负载均衡。

AUFS 中称要被 union 进来的目录为 Branch(也就是使用 mount 命令时 dirs 参数指定的目录),Branch 会根据 union 的顺序形成一个 stack,一般最上面的是可写的,下面是只读的。Branch stack 还是可以进行修改,比如修改顺序,加入新的 branch,或者删除其中的 branch,或者直接修改 branch 的权限。

AUFS 中被 Union 的目录(分支)有以下这些权限:

  • rw 表示可读可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值