深入理解 Overlayfs 在Docker中的应用

开发 架构
overlayfs 原理之前的文章已经介绍,今天我们一起看一下docker 里面是如何使用overlayfs 制作rootfs 的。

overlayfs 原理之前的文章已经介绍,今天我们一起看一下docker 里面是如何使用overlayfs 制作rootfs 的。

首先我们查看容器的文件系统

docker container inspect mycontainer | jq '.[0].GraphDriver'

将会输出如下结果

{  
"Data": {
"LowerDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab-init/diff:/var/lib/docker/overlay2/524a0d000817a3c20c5d32b79c6153aea545ced8eed7b78ca25e0d74c97efc0d/diff",
"MergedDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/merged",
"UpperDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/diff",
"WorkDir": "/var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/work" },
"Name": "overlay2"
}

可以清晰地看到 lowerdir、mergerdir 、workdir 以及 upperdir 。其中 upperdir 是可写层,MergedDir 是最终合并的结果,如果我们执行

ls /var/lib/docker/overlay2/63ec1a08b063c0226141a9071b5df7958880aae6be5dc9870a279a13ff7134ab/merged
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

便可以看到合并过后的rootfs 根目录了。当然如果你在 upperdir 里面的改动也会体现在 mergeddir里面。我们可以测试一下

进入 upperdir

进入 upperdir
# cd /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/diff

创建文件
# cd root/ && touch testfile

查看mergedDir结果
# ls /var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/merged/root/
testfile

执行mount 命令就可以清楚地看到底层目录是如何挂载到 merge dir 的。

overlay on/var/lib/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/merged type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/BUMMKXX6V7NKDDXVVYFYMZPD7U:/var/lib/docker/overlay2/l/UAFOM6XM534QEAFJ3OH5NRLJU4,upperdir=/home/chenxy/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/diff,workdir=/home/chenxy/docker/overlay2/d4632166ec8af2c274d8575bc60776489b9ca57631da96809ba533d0d065ce93/work)


责任编辑:武晓燕 来源: 今日头条
相关推荐

2023-03-02 08:26:36

RedisAVL红黑树

2021-06-30 17:55:34

Redis应用跳表

2024-05-11 07:13:33

C#Task编程

2024-07-18 10:12:04

2023-12-31 12:56:02

C++内存编程

2016-08-31 15:50:50

PythonThreadLocal变量

2023-10-08 08:53:36

数据库MySQL算法

2010-06-28 10:12:01

PHP匿名函数

2014-06-23 10:42:56

iOS开发UIScrollVie

2020-12-16 09:47:01

JavaScript箭头函数开发

2018-07-09 15:11:14

Java逃逸JVM

2013-06-20 10:25:56

2013-11-05 13:29:04

JavaScriptreplace

2010-06-01 15:25:27

JavaCLASSPATH

2020-07-21 08:26:08

SpringSecurity过滤器

2016-12-08 15:36:59

HashMap数据结构hash函数

2010-07-26 11:27:58

Perl闭包

2024-01-11 11:51:51

Rustmap数据结构

2024-01-09 08:28:44

应用多线程技术

2016-11-07 21:59:52

threadpython
点赞
收藏

51CTO技术栈公众号