客户端(本地)docker镜像存储结构

参考自:

Docker学习:Image的本地存储结构_weixin_34054866的博客-CSDN博客

                docker中各ID之间的关系和计算(二)-layerID-diffID-chainID-cacheID的计算_Penguinbupt的博客-CSDN博客

本地下载的docker镜像存储在/var/lib/docker/image/overlay2/目录下。

在一上目录下有distribution 、 imagedb 、 layerdb 三个目录和 repositories.json文件。

repositories.json中存储的是本地所有镜像列表,如下

客户端(本地)docker镜像存储结构_第1张图片

repositories.json存储格式为:

{"Repositories":

        {"reponame":

                {"reponame:tag":"sha256:digest1",

                 "reponame@sha256:digest2":sha256:digest1,.......

                },

                .......

        }

}

digest1和digest2不同,digest1应该是镜像内容的摘要,digest2的话.......?同一个镜像一个用tag标识,一个用sha256,即digest2标识

在imagedb目录下有content 和 metadata两个目录

metadata目录中存储每个镜像的parent镜像的ID以及当前镜像的最后更新时间,没有parent镜像的目录为空

客户端(本地)docker镜像存储结构_第2张图片

parent里面的内容:

 content目录存储镜像的json格式的描述信息:

  • config: 未来根据这个image启动container时,config里面的配置就是运行container时的默认参数。
  • container: 此处为一个容器ID,一般我们执行docker build构建镜像时,可以看见是不断地生成新的container,然后提交为新的image,此处的容器ID即生成该镜像时临时容器的ID,后面通过docker build构建镜像会进一步验证。
  • container_config:上述临时容器的配置,可以对比containner_configconfig的内容,字段完全一致,验证了config的作用。
  • history:构建该镜像的所有历史命令
  • rootfs:该镜像包含的layer层的diff id

 layerdb目录:

layerdb目录下有mounts 、 sha256 、 tmp三个子目录

最重要的为sha256目录,其内为每个layer解压后的内容计算的sha256摘要为名字的目录,即layer的diffID

客户端(本地)docker镜像存储结构_第3张图片

再里面就是:

  • diff:layer 的diff ID

  •  size:layer的大小(字节)。当计算为MB时是这里面的数值除以1000000,而不是除以(1024*1024)

  • tar-split.json.gz:layer层数据tar压缩包的split文件。该文件生成需要依赖tar-split,通过这个文件可以还原layer的tar包。
  • cache-id:内容为一个uuid,指向Layer本地的真正存储位置

那么Layer本地真正的存储位置又在何处呢?便是上面提到的/var/lib/docker/overlay2目录下:

客户端(本地)docker镜像存储结构_第4张图片

 需要注意,layerdb目录下除了diff、size、cache_id和tar-split.json.gz文件,还应该包括一个parent文件,文件存储了当前Layer层的父层chain_id,因为当前alpine镜像只有一层,所以也就没有parent。

 一个layer的chain-id为当前layer的id和所有parent layer的id的相加得出

distribution目录

该目录包含了Layer层diif id和digest之间的对应关系。里面是diffid-by-digest 、 v2metadata-by-diffid两个目录。

  • 其中diffid-by-digest保存了digest(layerID)->diffID的映射关系,即distribution hashes和Content hashes的映射关系。也即是正向查询

yH5BAAAAAAALAAAAAAOAA4AAAIMhI+py+0Po5y02qsKADs=wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

  • v2metadata-by-diffid保存了diffid -> (digest,repository)的映射关系,这可以方便查找layer的digest及其所属的repository。也即是反向查询,可以从diffID->layerID(其实就是digest)。

 

你可能感兴趣的:(docker,docker,运维,linux)