zoukankan      html  css  js  c++  java
  • 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/,即使容器停止了,容器对应的目录依然存在。只有删除容器时,对应的目录才会删除。

  • 相关阅读:
    简单聚合查询
    简单搜索入门
    简单的document操作
    快速检测集群的健康状况
    Log4j和Slf4j的比较
    javascript中escape()、unescape()、encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()比较
    Spring-data-jpa详解,全方位介绍。
    JSON关联属性转换异常
    原生类型 和 参数化类型
    Spring Data JPA
  • 原文地址:https://www.cnblogs.com/styshoo/p/6721381.html
Copyright © 2011-2022 走看看