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 ID0ef2e08ed3fa

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/下,这就是AUFS给容器和它下层layer的一个mount point。如果容器没有运行了,依然还有这个目录,但却是个空目录,因为AUFS只在容器运行时才映射。除此之外,还有一个-init的目录,表示init层。Docker 1.10之上的版本,目录名同样不和容器ID对应。
  容器的可写层存储在目录 /var/lib/docker/aufs/diff/,即使容器停止了,容器对应的目录依然存在。只有删除容器时,对应的目录才会删除。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker存储驱动是负责管理容器镜像和容器数据卷的组件。在不同的操作系统和文件系统上,Docker 支持不同的存储驱动。以下是常见的 Docker 存储驱动: 1. `aufs`:是 Docker 最早支持的存储驱动,它使用分层文件系统的方式来管理容器镜像和容器数据卷。但是,由于 `aufs` 不支持某些新的内核特性,因此在一些新的操作系统上可能无法使用。 2. `overlay` 和 `overlay2`:是 Docker 的新一代存储驱动,它们使用了 Linux 内核中的 OverlayFS 文件系统来管理容器镜像和容器数据卷。与 `aufs` 相比,`overlay` 和 `overlay2` 在性能、可靠性和兼容性方面都有所提升,因此是目前 Docker 推荐使用的存储驱动。 3. `btrfs`:是一种优秀的分层文件系统,它支持快照、复制、压缩等高级功能。Docker 的 `btrfs` 存储驱动可以利用这些功能来提高容器的性能和可靠性。但是,`btrfs` 的兼容性和稳定性并不是很好,因此在生产环境中并不常用。 4. `devicemapper`:是一种基于块设备的存储驱动,它可以在主机的块设备上创建逻辑卷,并将其用作容器镜像和容器数据卷的存储。虽然 `devicemapper` 支持多种文件系统,但是在性能和可靠性方面仍然不如 `overlay` 和 `overlay2`。 5. `zfs`:是一种高级文件系统,它可以支持快照、复制、压缩等高级功能。Docker 的 `zfs` 存储驱动可以利用这些功能来提高容器的性能和可靠性。但是,由于需要安装额外的软件和配置,因此在使用 `zfs` 存储驱动时需要一定的技术知识和经验。 需要注意的是,不同的存储驱动在不同的操作系统和文件系统上可能有不同的支持程度和使用限制。在选择存储驱动时,需要根据自己的需求和环境来进行评估和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值