1.overlay2存储驱动架构图
2.概念介绍
- 当需要修改一个文件时,使用cow(copy-on_write,写时拷贝)将文件从只读属性的Lower复制到读写属性的Upper进行修改,结果也保存在Upper层
- 在Docker中,底下的只读层就是Image,可写层就是Container
- 如上图所示,当我们在容器中访问(包括增删改查操作)某个文件时,如果在UpperDir中(即容器层)访问不到,就去LowerDir(即镜像层)访问,如果LowerDir和UpperDir中都有,那么UpperDir会覆盖LowerDir中的文件,从而被优先访问
概念 | 介绍 |
---|---|
LowerDir | 镜像层,只读 |
UpperDir | 容器层,可读可写 |
MergedDir | LowerDir和UpperDir的合集,作为视图层 |
初看上面的内容肯定会不理解,没关系,请跟着下面的实例演示操作一遍。
3.实例演示
该实例默认在已安装docker环境下操作,如未安装,请先安装docker环境
1.Docker入门:什么是Docker?如何安装Docker?
step.1 查看overlay2的镜像结构
# 进入/var/lib/docker/overlay2
[root@iz2ze78arq0qlz2ldzoxk3z docker]# cd /var/lib/docker/overlay2/
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll
total 4
drwx------ 2 root root 4096 Oct 9 17:38 l
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
step.2 下载nginx镜像,并运行nginx容器
# 下载并以后台的方式启动nginx,起名为nginx-1,设置公网访问为3344,设置启动占用端口为80
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# docker run -d --name nginx-1 -p 3344:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
d121f8d1c412: Pull complete
66a200539fd6: Pull complete
e9738820db15: Pull complete
d74ea5811e8a: Pull complete
ffdacbba6928: Pull complete
Digest: sha256:fc66cdef5ca33809823182c9c5d72ea86fd2cef7713cf3363e1a0b12a5d77500
Status: Downloaded newer image for nginx:latest
b46631088793c232075fb5020963a1f6bb455de2113896534f56e670c35c5d7f
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b46631088793 nginx "/docker-entrypoint.…" 37 seconds ago Up 37 seconds 0.0.0.0:3344->80/tcp nginx-1
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
step.3 再次查看overlay2的目录结构
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll
total 32
drwx------ 4 root root 4096 Oct 9 17:40 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b
drwx------ 3 root root 4096 Oct 9 17:40 2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192
drwx------ 4 root root 4096 Oct 9 17:40 2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd
drwx------ 5 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
drwx------ 4 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init
drwx------ 4 root root 4096 Oct 9 17:40 856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28
drwx------ 4 root root 4096 Oct 9 17:40 9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e
drwx------ 2 root root 4096 Oct 9 17:40 l
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
step.4 查看nginx镜像的详细信息
# 查看nginx的镜像详细信息,992e3b7be046是下载的nginx的镜像Id,可以通过docker images获取
docker inspect 992e3b7be046
# 由于篇幅有限,只列出部分内容,其中我们着重关注GraphDriver
[
{
... ...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff:/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff:/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff:/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff",
"MergedDir": "/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/merged",
"UpperDir": "/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff",
"WorkDir": "/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/work"
},
"Name": "overlay2"
}
... ...
}
]
# 为了方便观看,我们把这些目录路径分行列举出来
【LowerDir】
/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff
/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff
/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff
/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
【UpperDir】
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff
【MergedDir】
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/merged
【WorkDir】
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/work
# 为了方便对比,我们再把overlay2目录下的内容列出来
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll
total 32
drwx------ 4 root root 4096 Oct 9 17:40 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b
drwx------ 3 root root 4096 Oct 9 17:40 2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192
drwx------ 4 root root 4096 Oct 9 17:40 2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd
drwx------ 5 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
drwx------ 4 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init
drwx------ 4 root root 4096 Oct 9 17:40 856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28
drwx------ 4 root root 4096 Oct 9 17:40 9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e
drwx------ 2 root root 4096 Oct 9 17:40 l
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
可以看到,当前overlay2目录下除了
5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init
这个两个目录以外,其他目录都能一一对应nginx镜像的LowerDir、UpperDir、MergedDir、WorkDir的前缀,多出来的这两个目录我们放到后面说,可以先提一下的是这两个目录是nginx容器对应的目录。
step.5 查看nginx镜像层结构
nginx镜像层的LowerDir中的目录从上往下越来越底层,最底层2232b96是centos层,0772590是nginx层,我们以nginx层为例来查看镜像层结构
# 在此之前先查看一下软链接目录的内容,我们列举出来,方便后面对比
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll l/
total 28
lrwxrwxrwx 1 root root 72 Oct 9 17:40 25M3DGCRDJ3JGEGYYO6FOUGS6N -> ../2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff
lrwxrwxrwx 1 root root 72 Oct 9 17:40 BWR6CCYRZHPZGWV5PJA56ZQCZX -> ../856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff
lrwxrwxrwx 1 root root 72 Oct 9 17:40 DYRJLUUELXIXC3AOLOHHNBUNTW -> ../0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff
lrwxrwxrwx 1 root root 72 Oct 9 17:40 GGBFM2XRVEIMSKUL6YZW2LAIDA -> ../9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff
lrwxrwxrwx 1 root root 72 Oct 9 17:40 LOA76ZICCXWTAYB7FP4L5HKOPW -> ../2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
lrwxrwxrwx 1 root root 77 Oct 9 17:40 TY2VIEJBHC6N7YJULFALY635MT -> ../5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init/diff
lrwxrwxrwx 1 root root 72 Oct 9 17:40 Y2LEYQL6SK6TKJFUATQYSHMBWX -> ../5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/diff
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 进入nginx镜像层
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# cd 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]# ll
total 16
-rw------- 1 root root 0 Oct 9 17:40 committed
drwxr-xr-x 8 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
-rw-r--r-- 1 root root 28 Oct 9 17:40 lower
drwx------ 2 root root 4096 Oct 9 17:40 work
# 查看link文件的内容
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]# cat link
DYRJLUUELXIXC3AOLOHHNBUNTW
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]#
# 可以发现这与overlay2目录中的软链接目录 l 内记录的关系一致
# 查看lower文件内容
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]# cat lower
l/LOA76ZICCXWTAYB7FP4L5HKOPW
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]#
# 可以发现lower也对应软链接目录 l 内的某一个软链接,根据对比可知,该软链接对应的目录是
LOA76ZICCXWTAYB7FP4L5HKOPW -> ../2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
# 我们再看一下nginx镜像的LowerDir目录内容
【LowerDir】
/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff
/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff
/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff
/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
# 可以发现,2332b96是LowerDir中的最底层,即centos镜像层,因此当前目录中的lower文件软链接的是当前镜像层(nginx镜像层)的上一层(从文中列举的顺序来说是最底层)
# 进入diff目录查看
[root@iz2ze78arq0qlz2ldzoxk3z 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b]# cd diff/
[root@iz2ze78arq0qlz2ldzoxk3z diff]# ll
total 24
drwxr-xr-x 2 root root 4096 Oct 6 06:44 docker-entrypoint.d
drwxr-xr-x 20 root root 4096 Oct 6 06:44 etc
drwxr-xr-x 5 root root 4096 Oct 6 06:44 lib
drwxrwxrwt 2 root root 4096 Oct 6 06:44 tmp
drwxr-xr-x 7 root root 4096 Sep 8 15:00 usr
drwxr-xr-x 5 root root 4096 Sep 8 15:00 var
[root@iz2ze78arq0qlz2ldzoxk3z diff]# cd usr/share/
[root@iz2ze78arq0qlz2ldzoxk3z share]# ll
total 52
drwxr-xr-x 2 root root 4096 Oct 6 06:44 bug
drwxr-xr-x 3 root root 4096 Oct 6 06:44 ca-certificates
drwxr-xr-x 53 root root 4096 Oct 6 06:44 doc
drwxr-xr-x 2 root root 4096 Oct 6 06:44 doc-base
drwxr-xr-x 3 root root 4096 Oct 6 06:44 fontconfig
drwxr-xr-x 3 root root 4096 Oct 6 06:44 fonts
drwxr-xr-x 2 root root 4096 Oct 6 06:44 java
drwxr-xr-x 3 root root 4096 Oct 6 06:44 nginx
drwxr-xr-x 2 root root 4096 Oct 6 06:44 readline
drwxr-xr-x 3 root root 4096 Oct 6 06:44 sensible-utils
drwxr-xr-x 3 root root 4096 Oct 6 06:44 X11
drwxr-xr-x 3 root root 4096 Oct 6 06:44 xml
drwxr-xr-x 3 root root 4096 Oct 6 06:44 zsh
[root@iz2ze78arq0qlz2ldzoxk3z share]# tree nginx/
nginx/
└── html
├── 50x.html
└── index.html
1 directory, 2 files
[root@iz2ze78arq0qlz2ldzoxk3z share]#
# 根据这些目录结构可以证明这里是nginx镜像层
镜像层目录结构内容:
组成部分 | 说明 |
---|---|
committed | 制作镜像时的commit内容,不重要 |
diff | 记录每一层自己内容的数据,顾名思义,diff,不同,代表当前层与上一层的不同内容 |
link | 记录该层链接目录(实际是l目录中的某个链接) |
lower | 记录该层的上一层链接 |
work | 写时拷贝发生时才使用它,可以理解成专门给写时拷贝场景提供的目录 |
step.6 回过头再看overlay2目录结构
# 进入/var/lib/docker/overlay2
[root@iz2ze78arq0qlz2ldzoxk3z share]# cd /var/lib/docker/overlay2
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll
total 32
drwx------ 4 root root 4096 Oct 9 17:40 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b
drwx------ 3 root root 4096 Oct 9 17:40 2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192
drwx------ 4 root root 4096 Oct 9 17:40 2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd
drwx------ 5 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
drwx------ 4 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init
drwx------ 4 root root 4096 Oct 9 17:40 856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28
drwx------ 4 root root 4096 Oct 9 17:40 9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e
drwx------ 2 root root 4096 Oct 9 17:40 l
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 查看完nginx镜像层的目录内容(对应的是0772590),再看看其他目录的结构
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll 2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd
total 16
-rw------- 1 root root 0 Oct 9 17:40 committed
drwxr-xr-x 3 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
-rw-r--r-- 1 root root 86 Oct 9 17:40 lower
drwx------ 2 root root 4096 Oct 9 17:40 work
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll 9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e
total 16
-rw------- 1 root root 0 Oct 9 17:40 committed
drwxr-xr-x 3 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
-rw-r--r-- 1 root root 115 Oct 9 17:40 lower
drwx------ 2 root root 4096 Oct 9 17:40 work
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 可以看到其他镜像层跟nginx镜像层目录结构都一样
# 但是有一个例外,centos镜像层,即所有镜像都包括的最底层
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll 2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/
total 8
-rw------- 1 root root 0 Oct 9 17:40 committed
drwxr-xr-x 21 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 可以发现centos镜像层,即最底层,是没有lower和work的,这是因为centos镜像层作为最底层,是没有上一层的,也不允许写时拷贝操作(根本原因是不允许写操作)
step.7 查看nginx容器的详细信息
# 查看nginx的镜像详细信息,b46631088793是下载的nginx的镜像Id,可以通过docker ps获取
docker inspect b46631088793
# 由于篇幅有限,只列出部分内容,其中我们着重关注GraphDriver
[
{
... ...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init/diff:/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff:/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff:/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff:/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff:/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff",
"MergedDir": "/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/merged",
"UpperDir": "/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/diff",
"WorkDir": "/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/work"
},
"Name": "overlay2"
}
... ...
}
]
# 为了方便观看,我们把这些目录路径分行列出来
【LowerDir】
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init/diff
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff
/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff
/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff
/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff
/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
【UpperDir】
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/diff
【MergedDir】
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/merged
【WorkDir】
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/work
# 为了方便对比,我们再把nginx镜像的LowerDir内容列出来
/var/lib/docker/overlay2/2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd/diff
/var/lib/docker/overlay2/856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28/diff
/var/lib/docker/overlay2/0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b/diff
/var/lib/docker/overlay2/2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192/diff
# 可以发现nginx容器中的LowerDir内容比nginx镜像的LowerDir多出了这两个目录
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init/diff
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff
其中
/var/lib/docker/overlay2/9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e/diff
是nginx镜像的UpperDir内容
再看nginx容器的UpperDir内容
/var/lib/docker/overlay2/5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5/diff
# 为了方便对比,我们再把overlay2目录下的内容列出来
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll
total 32
drwx------ 4 root root 4096 Oct 9 17:40 0772590e61adc3bde67511a9ebe3ecc087aca8e8e2f8071c46c584d79116342b
drwx------ 3 root root 4096 Oct 9 17:40 2332b96407caa708d39dd4dd8baf5ee477c451ae7ffe86346825807a25fc4192
drwx------ 4 root root 4096 Oct 9 17:40 2350cc6a94b0bd0edc875315895a5a07be5bb6b2019f211d09f50703a55394fd
drwx------ 5 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
drwx------ 4 root root 4096 Oct 9 17:40 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init
drwx------ 4 root root 4096 Oct 9 17:40 856c994fa5ee5ceb2443634d5e0d5648c5444fa439eaa0ee1b9e4bda16149a28
drwx------ 4 root root 4096 Oct 9 17:40 9f1d6ac61af19429182c93cff9c0b5973d8604f00f69dc0e9a45895d0df5fb6e
drwx------ 2 root root 4096 Oct 9 17:40 l
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
现在就可以明白5e24293开头的这两个目录是哪来的了,没错,就是nginx容器的目录。
step.8 查看nginx容器层结构
# 查看nginx容器的LowerDir中xxx-init目录结构
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5-init/
total 16
-rw------- 1 root root 0 Oct 9 17:40 committed
drwxr-xr-x 4 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
-rw-r--r-- 1 root root 144 Oct 9 17:40 lower
drwx------ 3 root root 4096 Oct 9 17:40 work
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 可以看到与其他镜像层目录内容一致
# 查看nginx容器的UpperDir目录结构
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]# ll 5e24293506344c5595d886a3194b95ca3ddf34e5cf1b1566db796be4567a8de5
total 20
drwxr-xr-x 6 root root 4096 Oct 9 17:40 diff
-rw-r--r-- 1 root root 26 Oct 9 17:40 link
-rw-r--r-- 1 root root 173 Oct 9 17:40 lower
drwxr-xr-x 1 root root 4096 Oct 9 17:40 merged
drwx------ 3 root root 4096 Oct 9 17:40 work
[root@iz2ze78arq0qlz2ldzoxk3z overlay2]#
# 可以看到多了一个merged目录,少了一个committed文件
容器层目录结构内容:
组成部分 | 说明 |
---|---|
diff | 记录每一层自己内容的数据,顾名思义,diff,不同,代表当前层与上一层的不同内容 |
link | 记录该层链接目录(实际是l目录中的某个链接) |
lower | 记录该层的上一层链接 |
merged | LowerDir与UpperDir的合集,merged作为视图层,它对应的是MergedDir,因此镜像是没有该目录的,只有容器才有,我们使用docker inspect [image_id]能看到镜像也有MergedDir是因为它固定展示格式,实际上并不存在 |
work | 写时拷贝发生时才使用它,可以理解成专门给写时拷贝场景提供的目录 |
step.9 总结
overlay2目录包括三部分内容:
- 每个镜像层对应的目录文件
- 每个容器层对应的目录文件
- l 软链接目录,记录每个镜像层目录的软链关系
至此,请在回过头看文章开头的架构图和概念介绍,应该就能理解了。