Docker中aufs存储驱动layer、diff、mnt目录有哪些区别

81次阅读
没有评论

共计 2444 个字符,预计需要花费 7 分钟才能阅读完成。

这篇文章主要为大家展示了“Docker 中 aufs 存储驱动 layer、diff、mnt 目录有哪些区别”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Docker 中 aufs 存储驱动 layer、diff、mnt 目录有哪些区别”这篇文章吧。

Docker 基础信息

首先,先查询 Docker 使用的后端存储。使用命令 docker info,主要关注 Storage Driver 相关的部分。

$ docker info
Server Version: 1.12.6
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 84
 Dirperm1 Supported: true
...

由上可见,Docker 的版本是 1.12.6。使用的后端存储是 aufs 文件系统,并且其根目录是 /var/lib/docker/aufs。

Docker 镜像信息列出所有 Docker 镜像

$ docker images 
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 0ef2e08ed3fa 6 weeks ago 130 MB

可以看出,现在的环境中,只有一个镜像,其 IMAGE ID 为 0ef2e08ed3fa。

Docker 镜像详细信息

使用 docker inspect [docker IMAGE ID] 命令可以查询镜像的详细信息,.RootFS.Layers 部分可以看出该镜像总共包含五层,不过从 Docker v1.10 之后,子镜像 ID 并不与根目录中的文件名或目录名一致。

layer 目录

layer 中镜像 ID 对应的是一个文件,文件的内容是就是该镜像的祖先镜像列表,

$ ls -l /var/lib/docker/aufs/layers
total 16
-rw-r--r-- 1 root root 65 Apr 10 20:38 0970941dc3951f04f21bbbac1180b300006a22a970d4a04c269ac9de34e1bd47
-rw-r--r-- 1 root root 130 Apr 10 20:38 312d24c768f671045eabed1415a2ffc67dadea4e59b88c37bd2366a2f5b0fad9
-rw-r--r-- 1 root root 195 Apr 10 20:38 8317eee16b68c1620b59e38208d903e9f8f06e2b5f9cc29089eae373bfe491ce
-rw-r--r-- 1 root root 0 Apr 10 20:37 d2adfba71f24c5c409df4abef47f3caf4861f37b822f9ea3ed945f61e9aef77f
-rw-r--r-- 1 root root 260 Apr 10 20:38 eef7e551d5f8eaf2a7f1c54effef0f28a97978be3e79a2a7dd30f1962071c981

由于环境中只有一个 Docker 镜像,那么根据该目录下文件的大小,就可以得出大小最大的文件就对应 Docker 镜像中最上层的子镜像(因为其父镜像最多)。

$ cat /var/lib/docker/aufs/layers/eef7e551d5f8eaf2a7f1c54effef0f28a97978be3e79a2a7dd30f1962071c981
8317eee16b68c1620b59e38208d903e9f8f06e2b5f9cc29089eae373bfe491ce
312d24c768f671045eabed1415a2ffc67dadea4e59b88c37bd2366a2f5b0fad9
0970941dc3951f04f21bbbac1180b300006a22a970d4a04c269ac9de34e1bd47
d2adfba71f24c5c409df4abef47f3caf4861f37b822f9ea3ed945f61e9aef77f

diff 目录

diff 目录中,包含了五个子目录,对应了 Docker 镜像的五个子镜像。每个目录中,包含了子镜像存储的真实文件和目录。

$ ls -l /var/lib/docker/aufs/diff/eef7e551d5f8eaf2a7f1c54effef0f28a97978be3e79a2a7dd30f1962071c981
total 4
drwxr-xr-x 3 root root 4096 Feb 28 03:41 run

在上面示例种的子镜像层中,只有一个 run 的目录。

mnt 目录

mnt 目录中,也包含了五个子目录,对应了 Docker 镜像的五个子镜像。
当使用该镜像创建一个容器后,在该层又会多出容器对应的层,以及该容器的 init 层。
运行中的容器映射在 /var/lib/docker/aufs/mnt/ container-id 下,这就是 AUFS 给容器和它下层 layer 的一个 mount point。如果容器没有运行了,依然还有这个目录,但却是个空目录,因为 AUFS 只在容器运行时才映射。除此之外,还有一个 container-id -init 的目录,表示 init 层。Docker 1.10 之上的版本,目录名同样不和容器 ID 对应。
容器的可写层存储在目录 /var/lib/docker/aufs/diff/,即使容器停止了,容器对应的目录依然存在。只有删除容器时,对应的目录才会删除。

以上是“Docker 中 aufs 存储驱动 layer、diff、mnt 目录有哪些区别”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2444字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)