60秒讲清楚docker文件系统的分层机制

读完本文大概需要1分钟,如果看完你还不懂,可以怪我喽。

1、查看你的docker所用的文件系统类型

docker的storage-driver可以有很多种如:AUFS、OverlayFS、VFS、Brtfs等,docker默认使用overlay2,如下所示:

root@jinxin:/tftpboot/docker# docker info| grep Storage

Storage Driver: overlay2

2、docker overlay2文件系统机构图:

60秒讲清楚docker文件系统的分层机制

在上述相关推荐图中可以看到三个层结构,即:lowerdir、uperdir、merged,其中:

  • lowerdir是只读的image layer,其实就是rootfs,我们知道image layer可以分很多层,所以对应的lowerdir是可以有多个目录。
  • 而upperdir则是在lowerdir之上的一层,这层是读写层,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层,upperdir是可读可写的。
  • merged目录是容器的挂载点,也就是给用户暴露的统一视角,有点像是MVC里的View

对于docker而言,这些目录层都保存在了/var/lib/docker/overlay2

3、如何工作?

当容器中发生数据修改时候overlayfs存储驱动又是如何进行工作的?以下将阐述其读写过程:

读:

  • 如果文件在容器层(upperdir),直接读取文件;
  • 如果文件不在容器层(upperdir),则从镜像层(lowerdir)读取;

修改:

  • 首次写入: 如果在upperdir中不存在,overlay和overlay2执行copy_up操作,把文件从lowdir拷贝到upperdir,由于overlayfs是文件级别的(即使文件只有很少的一点修改,也会产生的copy_up的行为),后续对同一文件的在此写入操作将对已经复制到容器的文件的副本进行操作。这也就是常常说的写时复制(copy-on-write)
  • 删除文件和目录: 当文件在容器被删除时,在容器层(upperdir)创建whiteout文件,镜像层(lowerdir)的文件是不会被删除的,因为他们是只读的,但without文件会阻止他们显示,当目录在容器内被删除时,在容器层(upperdir)一个不透明的目录,这个和上面whiteout原理一样,阻止用户继续访问,即便镜像层仍然存在。

4、总结:

其实lowerdir是镜像层,目录或者文件是只读的;

upperdir是容器层,可读可写;

merged是表现层,向使用隐藏了技术细节,提供了一个统一的文件系统的使用视角。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值