在Dockerregistry中推送,删除和重新显示图像的行为

我有一些奇怪的行为与我的dockerregistry。 我检查我的容器的空间:

/ # du -sh 32.5M 

现在我推出一个新的形象:

 $ docker push myreg:5000/proj1/base:1.2 The push refers to a repository [myreg:5000/proj1/base] 89626147d178: Pushed 3fe9f0ce23f5: Layer already exists f59b7e59ceaa: Layer already exists 1.2: digest: sha256:effd45285012fdcc8ba7137a714d12f739abc372cd284ebcc079d083449edee3 size: 953 

比我重新检查空间:

 / # du -sh 62.8M 

好的,这是正常的。 现在我手动删除这个图像的清单( curl -XDELETE http://my-reg:5000/v2/proj1/base/manifests/1.2 seems not to work )(如果有人知道更好的方法…)我做:

 /var/lib/registry/docker/registry/v2/repositories/proj1/base/_manifests/revisions/sha256 # ls -l total 0 drwxr-xr-x 2 root root 17 Aug 23 09:50 effd45285012fdcc8ba7137a714d12f739abc372cd284ebcc079d083449edee3 

这是我推动图像时创build的清单。 我正在删除它:

 rm -r effd45285012fdcc8ba7137a714d12f739abc372cd284ebcc079d083449edee3 

空间是一样的

 / # du -sh 62.8M 

我使用GC删除未使用的图层/东西+重新检查空间:

 /bin/registry garbage-collect /etc/docker/registry/config.yml INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/45/45d78757942e9b4a09f74611cc8e1f61afe8dd2cd55996f4383534279dc49418 go.version=go1.6.3 instance.id=6dbf83a9-02da-40f3-adca-8a57cf697bea INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/c9/c9513f9342779b701e300b83f7409af763352751d50f06a8708eab3bf2980164 go.version=go1.6.3 instance.id=6dbf83a9-02da-40f3-adca-8a57cf697bea INFO[0000] Deleting blob: /docker/registry/v2/blobs/sha256/ef/effd45285012fdcc8ba7137a714d12f739abc372cd284ebcc079d083449edee3 go.version=go1.6.3 instance.id=6dbf83a9-02da-40f3-adca-8a57cf697bea / # du -sh 32.5M . / # 

这可以! 但是,当我重新显示相同的图像:它走得非常快,它告诉我图层已经存在:

 89626147d178: Layer already exists 3fe9f0ce23f5: Layer already exists f59b7e59ceaa: Layer already exists 

同样的修改是在我的体现。 我检查空间:

 / # du -sh 32.5M 

为什么这不再增长,为什么这个速度如此之快(是不是由GC扔掉了)? 这里使用的空间/bin/registry (我从哪里运行气相色谱),而不是在/var/lib/registry/docker/registry/v2/blobs/sha256在那里我期望它(当我只是推一个新的形象)。

 /bin # du -sh /bin/registry 26.0M /bin/registry