Device Mapper写时复制技术

本文详细介绍了Docker容器中的写时复制(COW)技术原理。解释了如何通过拷贝而非直接修改底层镜像来保护原始数据,并讨论了该技术对容器性能的影响及应对策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 写时复制原理

        写时复制技术是Docker 容器中非常核心的一个功能,Docker 容器运行后,当我们需要去修改一个不在最顶层分支中的文件时,这个时候最顶层的分支需要先将需要修改的文件从其所在的层拷贝到最顶层的分支,然后再对拷贝上上来的文件进行修改,文件修改完成后位于底层分支的文件内容并未发生改变,这种方式就是写时复制技术,也称COW。

        当我们在最上层的分支中去删除从底层分支拷贝上来的文件时,此时文件文件并没有被实际删除,只是在最顶层的分支中对被删文件进行了重命名和隐藏的操作,因此被执行删除操作的文件实际并没有被删除,只是不可见了。

        如下图所示,我们看到的文件file1 其实是镜像层中branch0分支中的文件:

                         

        当我们需要修改文件file1时,Device Mapper 中的写时复制技术会将文件file1直接拷贝到最上层的top branch,然后再进行修改,即我们修改的其实是从底层拷贝的文件:

        当我们需要删除文件file1时,由于文件file1是镜像层的文件,此时会在容器最上层中创建一个.wh开头的隐藏文件,从而将文件file1隐藏掉,所以文件file1并未被删除掉,这样也就保证了镜像层数据的完整性和复用性。

        有些同学可能会问,每次修改底层的文件时都需要先从底层将文件复制上来,是否会影响容器的性能?答案是会影响,所以一般建议对于容器中需要经常修改的文件不要放到底层的镜像层中,可以在容器运行起来后再将需要频繁修改的文件添加到容器中。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值