Delete docker images from docker registry
Steps
Get Digest by pulling image
Use docker pull
command can get image digest
docker pull registry.example.com/image_path/image:tag
If it is daily build for container backup purpose, the tag can be in date format, such as YYYYMMDD. The output can be
20210624: Pulling from image_path/image
...
22b5d63ad977: Already exists
8e2e66517d7e: Pull complete
Digest: sha256:7535af1f65524f9200b901fc31b9c779819e45c0502ef99605666842a319908f
Get Digest by deleting local image
The digest is also printed when deleting it.
docker rmi registry.example.com/image_path/image:tag
Sample output as below
Untagged: registry.example.com/image_path/image:tag
Untagged: registry.example.com/image_path/image@sha256:e300ff463dc18c7b3bf3964dc5a9832f613d829285a0da49e5fd37519dc7d0fc
Deleted: sha256:35baba3d5948b5844b67adcd6a236905039e929f8647d4e4afc9e64e9460d557
Deleted: sha256:bd681f3956f55dc028bae7ca4c2657457824a0e356c59705302fb084660a669b
Note: The Digest is the second tag, the sha256 in the first Deleted message is allowed to be deleted too, but the sha256 in the second Deleted message was not. Don't understand why
Get Digest by curl command
curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET https://$USER:$PASSWORD@registry.example.com/v
2/image_path/image/manifests/tag 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'
Check manifests existence
curl https://$USER:$PASSWORD@registry.example.com/v2/image_path/image/manifests/sha256:xxxxxxxxxxxxxxxx
Delete tag
curl -X DELETE https://$USER:$PASSWORD@registry.example.com/v2/image_path/image/manifests/sha256:xxxxxxxxxxxxxxxx
Run garbage-collect
docker exec registry bin/registry garbage-collect --delete-untagged /etc/docker/registry/config.yml
Restart registry if necessary
docker restart registry