searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

镜像推送和拉取

2024-07-03 09:52:33
1
0

1.  镜像拉取的过程

1. 执行命令 docker pull image:tag

2. dockerd守护进程解析 docker 客户端参数由镜像名 + tag构成向 registry 请求Manifest 文件,
首先一个镜像可能会存在多个架构,故镜像仓库会保存一份 manifest lists, 根据宿主机的请求获得对应架构的manifest

3. 根据manifest中存放的imageId判断本地是否已经存放的对应的镜像,若有,则不在拉取。 
对应的目录是 /var/lib/docker/image/overlay2/imagedb/content/sha256

4. 如没有则向仓库发起请求获取image config

5.从仓库获取对应的Image Config,并存放在上述目录/var/lib/docker/image/overlay2/imagedb/content/sha256

6. 根据image config中的diff_id, 查找 /var/lib/docker/overlay2 是否有对应的镜像层数据, 如有,则不在拉取

7. 如没有,根据manifest config 中镜像层的digestId 拉取镜像

8. 获取得到压缩后的镜像层

9. 解压镜像,对镜像层镜像进行sha256的哈希获取对应的值,和 image config 中的diff_id 镜像对比,一致则拉取成功,不一致则拉取失败

 

2.  镜像推送的过程

1 执行docker push image 发送请求给仓库registry

2. registry返回校验的token给docker-daemon

3. rigistry检查本次要上传的镜像层在仓库中是否已经存在?

4. 若存在,则docker daemon不再上传重复的镜像层,

5. 若不存在,则上传未存在的镜像。

6 发送上传结束的请求给registry

7. 上传manifest-config文件给rigistry

8. 检验镜像层文件和manifest-config文件的hash是否一致。

 

0条评论
0 / 1000
genius
4文章数
0粉丝数
genius
4 文章 | 0 粉丝