大概流程
最近搞镜像仓库反向代理遇到的问题,代理8443,服务端是20000,因为实际上域名指向代理服务器,而服务器根本没有20000端口,所以理所当然refused。
1 |
|
docker client
从官方 Index(“index.docker.io/v1”)查询镜像(“samalba/busybox”)的 位置- Index 回复:
samalba/busybox
在Registry A
上samalba/busybox
的校验码- token
docker client
连接Registry A
表示自己要获取samalba/busybox
Registry A
询问Index
这个客户端(token/user
)是否有权限下载镜像Index
回复是否可以下载- 下载镜像的所有
layers
1 |
|
获取认证URL
1 |
|
可以看到在第二步这里卡住了。
获取token
1 |
|
通过token获取image下载配置
docker发送image的名称+tag(或者digest)给registry服务器,服务器根据收到的image的名称+tag(或者digest),找到相应image的manifest,然后将manifest返回给docker
1 |
|
获取config
docker得到manifest后,读取里面image配置文件的digest(sha256),这个sha256码就是image的ID。根据ID在本地找有没有存在同样ID的image,有的话就不用继续下载了
如果没有,那么会给registry服务器发请求(里面包含配置文件的sha256和media type),拿到image的配置文件(Image Config)
1 |
|
根据配置文件中的diff_ids(每个diffid对应一个layer tar包的sha256,tar包相当于layer的原始格式),在本地找对应的layer是否存在
如果layer不存在,则根据manifest里面layer的sha256和media type去服务器拿相应的layer(相当去拿压缩格式的包)。
拿到后进行解压,并检查解压后tar包的sha256能否和配置文件(Image Config)中的diff_id对的上,对不上说明有问题,下载失败
1 |
|