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