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

浙公网安备 33010602011771号