docker 镜像

docker pull nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
 
/var/lib/docker/image/overlay2/layerdb/sha256  所有chainID目录(解压后的)
 
/var/lib/docker/image/overlay2/layerdb/sha256

ls -l
drwx------ 2 root root 85 6月   4 17:04 02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4
drwx------ 2 root root 71 6月   4 17:04 2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f
drwx------ 2 root root 85 6月   4 17:04 780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
drwx------ 2 root root 85 6月   4 17:04 7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14
drwx------ 2 root root 85 6月   4 17:04 b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5
drwx------ 2 root root 85 6月   4 17:04 b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7c

  

chaninid[1]=diffid[1]= 
chaninid[2] =echo -n "sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f sha256:e379e8aedd4d72bb4c529a4ca07a4e4d230b5a1d3f7a61bc80179e8f02421ad8" | sha256sum | awk '{print $1}'
780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
chaninid[3] =echo -n "sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5 sha256:b8d6e692a25e11b0d32c5c3dd544b71b1085ddc1fddad08e68cbd7fda7f70221" | sha256sum | awk '{print $1}'
b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7c
chaninid[4] = echo -n "sha256:b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7c sha256:f1db227348d0a5e0b99b15a096d930d1a69db7474a1847acbc31f05e4ef8df8c" | sha256sum | awk '{print $1}'
02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4
chaninid[5] = echo -n "sha256:02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4 sha256:32ce5f6a5106cc637d09a98289782edf47c32cb082dc475dd47cbf19a4f866da" | sha256sum | awk '{print $1}'
7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14
chaninid[6] = echo -n "sha256:7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14 sha256:d874fd2bc83bb3322b566df739681fbd2248c58d3369cb25908d68e7ed6040a6" | sha256sum | awk '{print $1}'
b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5

  

 

/var/lib/docker/image/overlay2/layerdb/sha256/02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4 下的目录

cache-id  diff  parent  size  tar-split.json.gz

  • parent:父layer的chainID
  • size:layer文件的大小
  • cache-id:存储驱动通过cache-id索引到layer的实际文件内容
  • diffid : 此层解压缩的 id

 

/var/lib/docker/image/overlay2 目录
(1)distribution 目录
diffid-by-digest 保存了digest(layerID)->diffID的映射关系
v2metadata-by-diffid 保存了diffid -> (digest,repository)的映射关系
digest(layerID) 就是 pull 镜像时的 hash ID,拉取是 镜像层文件是压缩文件,压缩态
diffid 是 docker inspect 查看到的 镜像层 hash ID,此时 镜像层文件是解压缩的,解压缩态
因此虽说这两种 ID 都表示 镜像层 hash ID,但一个是压缩的,一个是解压缩的,所以 hash 运算后不一致
(2)imagedb 目录
保存镜像的元数据信息
两个子文件夹 content/ 和 metadata/
tree /var/lib/docker/image/overlay2/imagedb 可以查看此目录的结构
打开content/sha256目录下以镜像ID命名的文件,我们可以看到镜像的元数据信息,包括了镜像架构、操作系统 、默认配置、创建时间、历史信息和rootfs等
cat /var/lib/docker/image/overlay2/imagedb/content/sha256/(目录下任一镜像ID) | python -mjson.tool
image元数据中layer的diffID是以低层到高层的顺序记录的
(3)layerdb 目录 ( chainID、cacah-id)
保存镜像层的关联关系
layerdb/sha256下的目录名称是以layer的chainID来命名的,它的计算方式为:
如果layer是最底层,没有任何父layer,那么diffID = chainID;
否则,chainID(n)=sha256sum(chainID(n-1)) diffID(n))
查看: tree /var/lib/docker/image/overlay2/layerdb -L 2
举例,查看某一镜像层 chainID 目录下的内容: cat /var/lib/docker/image/overlay2/layerdb/sha256/(任一chainID)
parent:父layer的chainID
size:layer文件的大小
cache-id:存储驱动通过cache-id索引到layer的实际文件内容
diff(猜测) : 此层解压缩的 id
(4)repositories.json 文件
这个需要先搞清楚 registry 是镜像仓库,而 repository 代表镜像组(比如不同版本的 nginx 镜像)
该文件中描述了宿主机上所有镜像的repository元数据,主要包括镜像名、tag和镜像ID
镜像ID是Docker采用SHA256算法
查看:cat /var/lib/docker/image/overlay2/repositories.json | python -mjson.tool

 

/var/lib/docker/image/overlay2 目录distribution 目录diffid-by-digest 保存了digest(layerID)->diffID的映射关系v2metadata-by-diffid 保存了diffid -> (digest,repository)的映射关系digest(layerID) 就是 pull 镜像时的 hash ID,拉取是 镜像层文件是压缩文件,压缩态diffid 是 docker inspect 查看到的 镜像层 hash ID,此时 镜像层文件是解压缩的,解压缩态因此虽说这两种 ID 都表示 镜像层 hash ID,但一个是压缩的,一个是解压缩的,所以 hash 运算后不一致imagedb 目录保存镜像的元数据信息两个子文件夹 content/ 和 metadata/tree /var/lib/docker/image/overlay2/imagedb 可以查看此目录的结构打开content/sha256目录下以镜像ID命名的文件,我们可以看到镜像的元数据信息,包括了镜像架构、操作系统 、默认配置、创建时间、历史信息和rootfs等cat /var/lib/docker/image/overlay2/imagedb/content/sha256/(目录下任一镜像ID) | python -mjson.toolimage元数据中layer的diffID是以低层到高层的顺序记录的layerdb 目录 ( chainID、cacah-id)保存镜像层的关联关系layerdb/sha256下的目录名称是以layer的chainID来命名的,它的计算方式为:如果layer是最底层,没有任何父layer,那么diffID = chainID;否则,chainID(n)=sha256sum(chainID(n-1)) diffID(n))查看: tree /var/lib/docker/image/overlay2/layerdb -L 2举例,查看某一镜像层 chainID 目录下的内容: cat /var/lib/docker/image/overlay2/layerdb/sha256/(任一chainID)parent:父layer的chainIDsize:layer文件的大小cache-id:存储驱动通过cache-id索引到layer的实际文件内容diff(猜测) : 此层解压缩的 idrepositories.json 文件这个需要先搞清楚 registry 是镜像仓库,而 repository 代表镜像组(比如不同版本的 nginx 镜像)该文件中描述了宿主机上所有镜像的repository元数据,主要包括镜像名、tag和镜像ID镜像ID是Docker采用SHA256算法查看:cat /var/lib/docker/image/overlay2/repositories.json | python -mjson.tool
posted @ 2025-06-04 17:46  rincloud  阅读(14)  评论(0)    收藏  举报