https://fuckcloudnative.io/posts/how-manage-image/

image的manifest

  • 包含image的config的digest ,这个digest同时也是 image id
  • layer 的 sha256 (这个一般是tar.gz的 sha256)和 media type

manifest 里面包含的内容就是对 config 和 layer 的 sha256 + media type 描述,目的就是为了下载 config 和 layer,等 image 下载完成后,manifest 的使命就完成了,里面的信息对于 image 的本地管理来说没什么用,所以 docker 在本地没有单独的存储一份 manifest 文件与之对应。

image的config

  • diff_ids(每个 diffid 对应一个 layer tar 包的 sha256,tar 包相当于 layer 的原始格式)

image/overlay2/imagedb/content/sha256/ 目录下,文件名称就是image的config文件内容的 sha256 码,即 image id

layer 的 diff_id 和 digest 的对应关系

layer 的 diff_id 存在 image 的配置文件中,而 layer 的 digest 存在 image 的 manifest 中,他们的对应关系被存储在了 image/overlay2/distribution 目录下:

$ tree -d /var/lib/docker/image/overlay2/distribution

/var/lib/docker/image/overlay2/distribution
├── diffid-by-digest
│ └── sha256
└── v2metadata-by-diffid
└── sha256
diffid-by-digest : 存放 digest 到 diffid 的对应关系
v2metadata-by-diffid : 存放 diffid 到 digest 的对应关系