Detail Docker Registry's delete image garbage collection

  • 2020-06-12 11:32:40
  • OfStack

The Docker warehouse supports API for removing the image in version 2.1, but this deletion only removes the image metadata, not the layer data. This issue was resolved in version 2.4 by adding a garbage collection command to remove unreferenced layer data. This article gives you a taste of this feature in the following steps.

1. Deploy the mirrored warehouse

(1) Start the warehouse container


dockerrun -d -v /home/config.yml:/etc/docker/registry/config.yml -p 4000:5000 --nametest_registryregistry:2.4.1

It should be noted that when starting the warehouse, the delete=true configuration item should be added to the storage configuration in the configuration file to allow the deletion of the image. The following configuration file is used in this experiment:


root@SZX1000041895:/# cat /home/config.yml
version: 0.1
log:
 fields:
 service: registry
storage:
 delete:
  enabled: true
 cache:
  blobdescriptor: inmemory
 filesystem:
  rootdirectory: /var/lib/registry
http:
 addr: :5000
 headers:
  X-Content-Type-Options: [nosniff]
health:
 storagedriver:
 enabled: true
 interval: 10s
 threshold: 3

(2) Upload image


root@SZX1000041894:/home# docker tag centos 10.229.43.217:4000/xcb/centos
root@SZX1000041894:/home# docker push 10.229.43.217:4000/xcb/centos
Thepushrefersto a repository [10.229.43.217:4000/xcb/centos]
5f70bf18a086: Pushed 
4012bfb3d628: Pushed
latest: digest: sha256:5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6 size: 1331

(3) View data In the warehouse container, view the size through du command, you can see that the current warehouse data size is 61M.


root@SZX1000041895:~# docker exec -it test_registry /bin/bash
root@e6d36b0d7e86:/# du -sch /var/lib/registry
61M .
61M total

2. Delete the image

Delete the corresponding API of the mirror as follows:


DELETE /v2/<name>/manifests/<reference>

name: Mirror name

reference: The mirror corresponds to the sha256 value

(1) Send a request to delete the image just uploaded


root@SZX1000041894:/home# curl -I -X DELETE http://10.229.43.217:4000/v2/xcb/centos/manifests/sha256:5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6
HTTP/1.1 202 Accepted
Docker-Distribution-Api-Version: registry/2.0
X-Content-Type-Options: nosniff
Date: Wed, 06 Jul 2016 09:24:15 GMT
Content-Length: 0
Content-Type: text/plain; charset=utf-8

(2) Check the data size


root@e6d36b0d7e86:/var/lib/registry# du -sch
61M .
61M total

You can see that the data size has not changed (only the metadata has been deleted)

3. Garbage collection

(1) Carry out container garbage collection command

Command:


registry garbage-collect config.yml

root@e6d36b0d7e86:/var/lib/registry# registry garbage-collect /etc/docker/registry/config.yml
INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/96/9687900012707ea43dea8f07a441893903dd642d60668d093c4d4d2c5bedd9eb go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58
INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/a3/a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58
INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/c3/c3bf6062f354b9af9db4481f24f488da418727673ea76c5162b864e1eea29a4e go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58
INFO[0000] Deletingblob: /docker/registry/v2/blobs/sha256/5b/5b367dbc03f141bb5246b0dff6d5fc9c83d8b8d363d0962f3b7d344340e458f6 go.version=go1.6.2 instance.id=4d875a6c-764d-4b2d-a7c2-4e85ec2b9d58

(2) Check the data size


root@e6d36b0d7e86:/var/lib/registry# du -sch            
108K .
108K total

You can see that the mirror data has been deleted, from 61M to 108K


Related articles: