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.html1 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目录包括三部分内容:

  1. 每个镜像层对应的目录文件
  2. 每个容器层对应的目录文件
  3. l 软链接目录,记录每个镜像层目录的软链关系

至此,请在回过头看文章开头的架构图和概念介绍,应该就能理解了。

1.Docker进阶:存储驱动overlay2相关推荐

  1. Docker 容器文件存储驱动 Overlay2

    码字不易,转载请注明出处!! 写在前面 Docker 文件存储驱动有很多种,比如 overlay2.aufs等,可以通过命令 docker info 查看: > # docker info &g ...

  2. 关于docker的存储驱动

    2019独角兽企业重金招聘Python工程师标准>>> #背景 一直以来我的业务都是跑在aufs+ext4的存储驱动结构上,看上去没有什么问题,直到业务报告: 在高并发场景下,auf ...

  3. Docker 文件存储驱动:AUFS 文件系统原理及生产环境的最佳配置

    我们知道,Docker 主要是基于 Namespace.cgroups 和联合文件系统这三大核心技术实现的.那么你知道联合文件系统是什么吗?它的原理又是什么呢?首先我们来了解一下什么是联合文件系统. ...

  4. Docker aufs存储驱动layer、diff、mnt目录的区别

    2019独角兽企业重金招聘Python工程师标准>>> Docker基础信息 首先,先查询Docker使用的后端存储.使用命令docker info,主要关注Storage Driv ...

  5. Docker存储驱动之OverlayFS简介

    简介 OverlayFS是一种和AUFS很类似的文件系统,与AUFS相比,OverlayFS有以下特性: 1) 更简单地设计: 2) 从3.18开始,就进入了Linux内核主线: 3) 可能更快一些. ...

  6. Docker存储驱动

    Docker Storage Driver 每个 Docker 容器都有一个本地存储空间,用于保存层叠的镜像层(Image Layer)以及挂载的容器文件系统. 默认情况下,容器的所有读写操作都发生在 ...

  7. DOCKER存储驱动之DEVICE MAPPER简介

    Device Mapper是一个基于kernel的框架,它增强了很多Linux上的高级卷管理技术.Docker的devicemapper驱动在镜像和容器管理上,利用了该框架的超配和快照功能.为了区别, ...

  8. nvidia-docker(GPU)和存储驱动(storage_driver)

    一.docker使用nvidia  GPU 1.nvidia-docker2 安装使用NVIDIA-Docker--使用GPU的Docker容器 https://blog.csdn.net/qq_31 ...

  9. 理解镜像、容器和存储驱动

    理解镜像.容器和存储驱动 为了更有效地使用存储驱动,你必须理解Docker如何创建和存储镜像.接下来,需要理解容器是如何使用这些镜像的.最后,你需要一个对镜像和容器操作者都需要的技术简介. 镜像和图层 ...

最新文章

  1. iOS仿抖音节拍界面、Swift,MVVM架构完整项目、日历demo、滚动切换分类等源码
  2. 在RHEL6.6环境下进行LVS-NAT实验(Vmware模式)
  3. Android Studio——怎么设置代码补全以及提示(详细)?
  4. 【Pygame小游戏】这款休闲游戏你肯定了解过《开心消消乐》更新版本上线,好土好喜欢
  5. python爬取豆瓣电影TOP250
  6. 谷歌 MapReduce 初探
  7. selenium上传文件方法
  8. 责任心来自爱而不是债
  9. 传闻再起 微软成功收购雅虎五大理由分析
  10. Leetcode_NO199_二叉树的左视图,右视图
  11. LibreELEC 8.2.4:支持最新Raspberry Pi 3 Model B+
  12. Microsoft Edge安装扩展插件
  13. 四、jQuery 中的事件和动画(嘎嘎详细)
  14. mysql使用exists、in、distinct区别
  15. 为变量赋值(SQL)
  16. 分布式系统中间件整理
  17. vue 所见即所得_适用于Vue.js的轻量级所见即所得HTML编辑器
  18. 解决方案|电力行业应如何应对数字化转型危机
  19. echart简单使用
  20. 外卖返利小程序系统公众号外卖饿了么美团cps返利小程序分销系统

热门文章

  1. 工控前辈经验之谈 | 编写PLC程序我从做Excel表开始
  2. Tensorflow twitter-RNN-评论情感分析(l2正则)
  3. 百货商场数字化|百联靠全渠道实现疫情期间业务增长
  4. PostgreSQL 新手入门
  5. 学习linux能有什么用
  6. 关于文件“Makefile”的修改时间在将来 XXX S后的问题
  7. 汇通网fx678交易工场是一个骗子集团
  8. linux常用基础命令整理
  9. 三国志英杰传高级玩法
  10. gre计算机考试科目,GRE考试内容