将远程标记添加到泊坞窗图像

时间:2014-11-05 17:29:11

标签: docker

在私人注册表(myregistry.com)上,说我的图片标有'v1.2.3'。然后我推动它:

docker push myregistry.com/myimage:v1.2.3

如果我想关联另一个标签,说'staging',并将该标签推送到我的注册表,我可以:

docker tag myregistry.com/myimage:v1.2.3 myregistry.com/myimage:staging docker push myregistry.com/myimage:staging

虽然这样可行,但第二个docker push仍然会遍历每个图像,尝试推送它(尽管跳过上传)。有没有更好的方法来添加远程标签?

2 个答案:

答案 0 :(得分:14)

您已说明的方式,docker tag ...; docker push ...是向图片添加标签并分享标签的最佳方式。

在您给出的具体示例中,两个标记都在同一个仓库中(myregistry.com/myimage)。在这种情况下,您只需docker push myregistry.com/myimage,默认情况下,docker守护程序将同时推送所有代码的标记,从而将迭代保存在共享图层的图层上。

您也可以使用相同的过程(docker tag ...; docker push ...)在存储库之间标记图像,例如

docker tag myregistry.com/myimage:v1.2.3 otherregistry.com/theirimage:v2
docker push otherregistry.com/theirimage

答案 1 :(得分:2)

拉/标记/推方法会花费时间和网络成本,您只需使用以下方式远程标记图像即可:

仅用于更改 TAG ,答案https://stackoverflow.com/a/38362476/8430173有用,但是我也想更改存储库名称

非常感谢this,我也更改了repoName!

(在他的Github项目的帮助下):

1-获取清单(在v2模式中)
2-在新仓库中发布每个图层。摘要
3-发布config.layer
4-将整个清单放到新的仓库中


详细信息:

1- GET 清单来自reg:5000/v2/{oldRepo}/manifests/{oldtag},带有accept标头:application/vnd.docker.distribution.manifest.v2+json

2-每一层: POST reg:5000/v2/{newRepo}/blobs/uploads/?mount={layer.digest}&from={oldRepoNameWithaoutTag}

3- POST reg:5000/v2/{newRepo}/blobs/uploads/?mount={config.digest}&from={oldRepoNameWithaoutTag}

4-PUT reg:5000/v2/{newRepo}/manifests/{newTag},其标题为content-type:来自步骤1响应的application/vnd.docker.distribution.manifest.v2+jsonbody

5-享受!