假设我在myrepo.myhost.com有一个私有的Docker存储库。
现在,我根据一个非常大的公共码头注册中心映像构建了一个映像。假设它叫做bandwidthguy/five-gigabyte-image:latest。
我有一个Dockerfile,它做一件简单的事情,例如:
FROM bandwidthguy/five-gigabyte-image
COPY some-custom-file /etc/bigstuff我塑造了这样的形象:
docker build -t myversionof-five-gigabyte-image .给它贴上标签。
docker tag myversionof-five-gigabyte-image:latest myrepo.myhost.com/myversions/five-gigabyte-image:latest现在我开始做我的回购。
docker push myrepo.myhost.com/myversions/five-gigabyte-image我注意到,在这样做时,整个大型源映像会被推送到我的存储库中。
我想知道的是,如果有任何方法让Docker只推一个不同的图像,然后从他们各自的来源,从其他层的图像被拉出。把整个形象推给我的私人回购可能会有问题:
可能是因为你不能将部件放在不同的服务器上,但我想问一问是否可以做到这一点是值得的。为了运行空隙服务器,您可以将所有的层存储在您自己的主机上,这是有意义的,但是您不能从注册表中提取源图像似乎有点疏忽。
发布于 2021-10-12 18:20:06
这个问题说明了我早期对码头工人的误解。目前还没有将图像的不同层存储在不同存储库中的机制。虽然没有任何理论上的理由不能实现这一点,但我猜它只是不值得额外的努力。
所以,我的问题的答案是否定的,你不能只在私人回购中存储图像差异--你将把所有的层次,包括那些从公共回购中提取出来的,存储在你的私人回购中。然而,由于层是由它们的散列来表示的,已经从公共回购中提取图像的客户端将不再需要从私有回购中重新下载这些层。这可能导致这样一种可能性,即可能会手动将非常大的层的散列从私有回购中踢出,然后用户可能需要首先手动从公共中提取源映像。(从私人回购中提取新鲜产品只会出错。)我还没有对此进行调查,但这可能是一种可能的麻烦解决方案。
幸运的是,没有太多的Docker图像实际上需要多个千兆字节的空间。即使如此,在注册表中存储、压缩和重复层。
https://stackoverflow.com/questions/55233679
复制相似问题