自己动手写docker笔记(3):Union File System分析

概述OverlayFS(overlay)的镜像分层与共享:
OverlayFS使用两个目录,把一个目录置放于另一个之上,并且对外提供单个统一的视角。这两个目录通常被称作层,这个分层的技术被称作union mount。术语上,下层的目录叫做lowerdir,上层的叫做upperdir。对外展示的统一视图称作merged。


  上图展示了Docker镜像和Docker容器是如何分层的。镜像层就是lowerdir,容器层是upperdir。暴露在外的统一视图就是所谓的merged。

分析一波联合文件系统,具体概念不再赘述。

首先使用docker info 查看自己主机上的文件系统驱动:

[root@dockcon ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 17.12.0-ce
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 89623f28b87a6004d4b785663257362d1658a729
runc version: b2567b37d7b75eb4cf325b77297b140ea686ce8f
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-693.2.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.796GiB
Name: dockcon
ID: SMEH:O3GP:L26O:MMNZ:VPXN:VE7D:OWYX:RBD4:P3ZO:PI5E:XCHM:PVPU
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 http://3b13d85e.m.daocloud.io/
Live Restore Enabled: false

可以看到Storage Driver: overlay2就是本机的文件驱动,个人认为绝大多数主机默认Storage Driver: overlay2

overlay中镜像和容器的磁盘结构

查看下docker目录有什么文件先:

[root@dockcon ~]# ls /var/lib/docker/
builder     containers  network   plugins   swarm  trust
containerd  image       overlay2  runtimes  tmp    volumes

可以看到有个overlay2驱动的文件夹

[root@dockcon ~]# ls /var/lib/docker/overlay2/
l
[root@dockcon ~]# ls /var/lib/docker/overlay2/l
[root@dockcon ~]# 

overlay2文件夹下只有一个名为"l"的文件夹,其里面是没有任何东西的

现在我们pull一个镜像看看有什么变化:
docker pull ubuntu:16.04

[root@dockcon ~]# docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
50aff78429b1: Pull complete 
f6d82e297bce: Pull complete 
275abb2c8a6f: Pull complete 
9f15a39356d6: Pull complete 
fc0342a94c89: Pull complete 
Digest: sha256:ec0e4e8bf2c1178e025099eed57c566959bb408c6b478c284c1683bc4298b683
Status: Downloaded newer image for ubuntu:16.04
[root@dockcon ~]# ls -lh /var/lib/docker/overlay2/
总用量 24K
drwx------ 3 root root 4.0K 1月   5 18:11 272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d
drwx------ 4 root root 4.0K 1月   5 18:11 27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5
drwx------ 4 root root 4.0K 1月   5 18:11 3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d
drwx------ 4 root root 4.0K 1月   5 18:11 767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0
drwx------ 4 root root 4.0K 1月   5 18:11 9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5
drwx------ 2 root root 4.0K 1月   5 18:11 l

上图的输出结果显示pull了5个目录包含了5个镜像层,每一层在/var/lib/docker/overlay/下都有自己的目录。还是再次提醒下,如你所见,Docker1.10之后,镜像层和目录名不再对应。 可以看到下载好镜像文件后生成了5个文件夹:

可以细看下各大文件夹中有什么:
镜像层目录中,共享的数据使用的是硬链接,他们的inode号大致相同

[root@dockcon ~]# ls -i /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/
524290 diff  524291 link
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d/
529901 diff  529902 link  529904 lower  529903 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5/
529855 diff  529856 link  529858 lower  529857 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0/
529824 diff  529825 link  529827 lower  529826 work
[root@dockcon ~]# ls -i /var/lib/docker/overlay2/9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5/
529887 diff  529888 link  529890 lower  529889 work

l目录包含了很多软连接,使用短名称指向了其他层。短名称用于避免mount参数时达到页面大小的限制。

[root@dockcon ~]# ls -l /var/lib/docker/overlay2/l
总用量 20
lrwxrwxrwx 1 root root 72 1月   5 18:11 3D2CWICPWSIPH7MGMMN547YEBT -> ../27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 4RXVMMWNWAOS5B2CMTCFXH7BRR -> ../9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 AXSD3MNZKXUUQONMUPF3M2HCEL -> ../3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 C7FGXOVWEZ6INXOALK3ADGFSA6 -> ../272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff
lrwxrwxrwx 1 root root 72 1月   5 18:11 TF4R7NB3BG3CEC4WXVQ2FRVOXC -> ../767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0/diff

在最低层中,有个link文件,包含了前面提到的这个层对应的短名称;还有个diff目录,包含了这个镜像的内容。

[root@dockcon ~]# ls /var/lib/docker/overlay2/
272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d  767844cd18e3ca77793b48673198cabbdcf7f2dd45b6f75e707f15595ec1a5e0
27f03471e446d3a55dfd21ebfd8f5dd26f08d530d5c55d47f0118738717060b5  9d7dcb47a9967120ec35c50979356fde3c4c4ec4817f347799ad9f5c2b0852a5
3856ca6fafc077314aaa5e60cf7950861156fabbe92881bc6bce5e68fcd2226d  l
[root@dockcon ~]# ls /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/
diff  link
[root@dockcon ~]# cat /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/link
C7FGXOVWEZ6INXOALK3ADGFSA6

可以看到这个link文件和“l”目录下的第四个链接
C7FGXOVWEZ6INXOALK3ADGFSA6 -> ../272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff是对应的

查看下diff目录

[root@dockcon ~]# ls /var/lib/docker/overlay2/272f388add72722e560f11925bf4ee5a3b3fb664fe3a099a9576798745f85c3d/diff/
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

可以看到当前镜像层下也是存在齐全的文件系统的

研究未完成~待续~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,377评论 0 27
  • 原文发布在:http://cizixs.com/2016/04/06/docker-images,转载请注明出处。...
    cizixs阅读 2,698评论 1 16
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,506评论 15 147
  • 一 、什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国...
    Blazzer阅读 3,128评论 0 13
  • “你确定要离开吗?” “确定,我已经准备好了” “你舍得你的爸妈,你的工作,和这个熟悉的城市?” “舍不得,可是我...
    浮生术阅读 364评论 3 2