对于overlay2
从registry下载的image,保存在/var/lib/docker/overlay2/<cache-ID>
# docker pull ubuntu //3个layer层
# docker pull ubuntu:latest
Using default tag: latest
latest: Pulling from library/ubuntu
345e3491a907: Pull complete
57671312ef6f: Pull complete
5e9250ddb7d0: Pull complete
Digest: sha256:adf73ca014822ad8237623d388cedf4d5346aa72c270c5acc01431cc93e18e2d
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
根据上面的docker中各ID之间的关系和计算(二)-layerID-diffID-chainID-cacheID的计算 从layerID最终计算出来一共有3个cacheID。但是出现了4个文件夹,包括3个层文件夹和l文件夹,其中l文件夹包含了软连接。
我们查看一个层(这是最底层,也称为第1最底层)
#ls /var/lib/docker/overlay2/<cache-id>/
#ls /var/lib/docker/overlay2/a088c1e02d8a9681aa6456dbeae3eac98e8df8ac8b1f406b1ba697455466b1e2/
发现有一个文件link和一个文件夹diff,其中link包含了这个层对应的最短标识号,这个最短标识号和l文件夹中是一致的。而diff文件夹存储了这个层的具体内容。
# cat link
W3L3QHW2JRHQUJCXZYNEYR3XLX
# ls -al ../l/W3L3QHW2JRHQUJCXZYNEYR3XLX
第2最底层和更高的层,包含了一个文件lower,它指定了他的底层(父层),diff文件夹也是存储了这个层的具体内容,merged文件夹包含了它和它的父层的合并内容,work文件夹提供Overlay内部使用。
根据第二层的chainID->cacheID:
#ls /var/lib/docker/overlay2/d7c5c6626a2749b791472a456a5adea90595fccbc5eb3a89773279ba834063ee
发现有除了link和diff,还包含了一个文件lower,它指定了他的底层(父层)的短,merged文件夹包含了它和它的父层的合并内容,work文件夹提供Overlay内部使用。
lower保存了l/W3L3QHW2JRHQUJCXZYNEYR3XLX,也即是标识了上一层的cache-id。
link为53GPZKONCXHIM4YGCHOEWXZWII
对于第三层的chainID->cacheID
#ls
/var/lib/docker/overlay2/ddd5760e7cbfde67e325e77b540dfc13e7dccf1c7d1b156554d0a79378642bd1
也看一下lower:
l/53GPZKONCXHIM4YGCHOEWXZWII:l/W3L3QHW2JRHQUJCXZYNEYR3XLX
发现lower将层级叠加了起来。
总结:
算出来的这些恰恰是 inspect这个镜像的"GraphDriver": "Data“等值,如图所示:
其中
LowerDir分别为 两个底层的cache-id数值,diff文件夹里面是他们包含的内容。
UpperDir为当前这个最高层的cache-id,diff文件夹里面是本层的内容。
MergedDir为这三个层的组合路径为最高层的cache-id,merged文件夹里面包含的是三层的组合内容。
(略)对于overlay而言:
$ ls -l /var/lib/docker/overlay/<directory-of-running
-container>
total 16
-rw-r--r-- 1 root root 64 Jun 20 16:39 lower-id
drwxr-xr-x 1 root root 4096 Jun 20 16:39 merged
drwxr-xr-x 4 root root 4096 Jun 20 16:39 upper
drwx------ 3 root root 4096 Jun 20 16:39 work
lower-id表示了当前这个容器依赖的底层镜像id
upper文件夹包含了容器读写层的内容,对应于OverlayFS upperdir
Merged文件夹是组合了lowerdir和upperdir