20、Docker基础知识-Image Index 和 manifest

1.引子

Digest: sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee
ImageID:c316d5a335a5
Digest 和 ImageID区别和联系?

[root@liuliu .docker]# docker pull nginx@sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee
docker.io/library/nginx@sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee: Pulling from library/nginx
5eb5b503b376: Already exists 
1ae07ab881bd: Pull complete 
78091884b7be: Pull complete 
091c283c6a66: Pull complete 
55de5851019b: Pull complete 
b559bad762be: Pull complete 
Digest: sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee
Status: Downloaded newer image for nginx@sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee
docker.io/library/nginx@sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee

[root@liuliu .docker]#  docker images --digests | grep nginx
nginx    <none> sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee   c316d5a335a5   2 weeks ago     142MB

2.Image Index 和 Manifest 和 config

在这里插入图片描述

2.1.Image Index

ImageIndex 又称fat manifest,manifest list ,主要作用就是:构建多CPU架构的镜像

[root@node1 ~]# docker manifest inspect nginx
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1570,
         "digest": "sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 1570,
         "digest": "sha256:2d5caa26de50de8f53779007669c67ae03b14ccd61f3ace2da5b5857e97e821b",
         "platform": {
            "architecture": "arm",
            "os": "linux",
            "variant": "v5"
         }
      },
      ...
      }
   ]
}

2.2.Manifest

Manifest 作用:主要存在registry中作为docker镜像的元数据文件,在pull,push,save,load中作为镜像结构和基础信息的描述文件。在镜像pull或者load到宿主机时,manifest被转为本地镜像配置文件config

Manifest json文件我们需要关注这些字段:config.digest == 这个就是image IDlayers 层的digest

[root@node1 ~]# docker manifest inspect nginx@sha256:bb129a712c2431ecce4af8dde831e980373b26368233ef0f3b2bae9e9ec515ee
{
	"schemaVersion": 2,
	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
	"config": {
		"mediaType": "application/vnd.docker.container.image.v1+json",
		"size": 7657,
		"digest": "sha256:c316d5a335a5cf324b0dc83b3da82d7608724769f6454f6d9a621f3ec2534a5a"
	},
	"layers": [
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 31366257,
			"digest": "sha256:5eb5b503b37671af16371272f9c5313a3e82f1d0756e14506704489ad9900803"
		},
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 25352768,
			"digest": "sha256:1ae07ab881bd848493ad54c2ba32017f94d1d8dbfd0ba41b618f17e80f834a0f"
		},
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 601,
			"digest": "sha256:78091884b7bea0fa918527207924e9993bcc21bf7f1c9687da40042ceca31ac9"
		},
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 893,
			"digest": "sha256:091c283c6a66ad0edd2ab84cb10edacc00a1a7bc5277f5365c0d5c5457a75aff"
		},
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 666,
			"digest": "sha256:55de5851019b8f65ed6e28120c6300e35e556689d021e4b3411c7f4e90a9704b"
		},
		{
			"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
			"size": 1394,
			"digest": "sha256:b559bad762bec166fd028483dd2a03f086d363ee827d8c98b7268112c508665a"
		}
	]
}

如下只讨论ImageIndex ,imagemanifest,Imageconfig

imageIndex 和 Imagemanifest 是一对多的关系
imagemanifest 和 imageconfig 是一对一的关系

拉取镜像的流程

第一步:找到ImageIndex(里面由manifests 列表,找到manifest)
第二步:找到manifest
第三步:下载imageconfig 和 layers
通过docker manifest inspect busybox:latest 命令看下的 ImageIndex 文件格式

{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [ // manifest集合,可能是arm 架构,也可能是amd架构,等等,下载镜像会检测匹配
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 527,
         "digest": "sha256:99243e861067446c9aed305b5690cccb88658d23af3fde338398f27386ded1be", // 这个就是manifest文件的指纹
         "platform": {
            "architecture": "amd64", // amd64架构
            "os": "linux"  // 适用于linux 系统
         }
      }
      ...
   ]
}

来看下manifest.json文件的格式(随便找的一个格式,和busybox上述版本不一致)。

Digest: sha256:9fd67116449f225c6ef60d769b5219cf3daa831c5a0a6389bbdd7c952b7b352d 这个值就是这个manifest.json做的sha256sum 的指纹值
{
    "layers": [
        {
            "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
            "digest": "sha256:8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f", //这个是各个层对应的文件
            "size": 667590
        }
    ],
    "schemaVersion": 2,
    "config": {
        "mediaType": "application/octet-stream",
        "digest": "sha256:a77dce18d0ecb0c1f368e336528ab8054567a9055269c07c0169cba15aec0291", // 这个就是我们的镜像Id ,就是image confg 对应的文件
        "size": 1459
    },
    "mediaType": "application/vnd.docker.distribution.manifest.v2+json"
}

拉取镜像文件在哪里

docker pull busybox@sha256:99243e861067446c9aed305b5690cccb88658d23af3fde338398f27386ded1be

docker images ls | grep busy
busybox                                           <none>              a77dce18d0ec        5 days ago          1.24MB

docker images --digests | grep busybox
busybox                                           <none>              sha256:99243e861067446c9aed305b5690cccb88658d23af3fde338398f27386ded1be   a77dce18d0ec        5 days ago          1.24MB

# 注意此时mamifest.json文件对应的指纹为:99243e861067446c9aed305b5690cccb88658d23af3fde338398f27386ded1be
# 对应的imageid a77dce18d0ec

cd /var/lib/docker/image/overlay2
vim repositories.json 
# 主要看下面这段,我们要找到imgeid
    "busybox": {
      "busybox@sha256:99243e861067446c9aed305b5690cccb88658d23af3fde338398f27386ded1be": "sha256:a77dce18d0ecb0c1f368e336528ab8054567a9055269c07c0169cba15aec0291"
    },
cd /var/lib/docker/image/overlay2/imagedb/content/sha256
# 找到 a77dce18d0ecb0c1f368e336528ab8054567a9055269c07c0169cba15aec0291 文件,对这个文件做sha256sum 得到就是a77dce18d0ecb0c1f368e336528ab8054567a9055269c07c0169cba15aec0291  这个就是imageid

总结

Image Index 就是manifest 的集合

manifest 记录了image config 和 layers

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值