Удалить помеченный образ Docker из личного реестра

На сегодняшний день, похоже, нет простого способа удалить изображения из реестра, и похоже, что это функция для реестра 2.1 веха.

Один из вариантов, который мы имеем сегодня с этим, не работает

anovil@ubuntu-anovil remove-registry]$ curl -X DELETE localhost:5000/v2/alpine/manifests/v1{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}[anovil@ubuntu-anovil remove-registry]$ 

заключается в том, чтобы вручную удалить его из самого реестра. Просто чтобы избежать случайного удаления неправильного файла, я протестировал его с помощью этот скрипт из github. Я не даю никаких гарантий относительно того, как работает этот скрипт (хотя я быстро проверил его, прежде чем протестировать).

Итак, я провел тест, и, похоже, это сработало :)

[1] Я предполагаю, что вы запускаете реестр с помощью самого docker.

[anovil@ubuntu-anovil remove-registry]$ docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES88f8e1a1d7a7        registry:2          "/bin/registry /etc/d"   37 minutes ago      Up 37 minutes       0.0.0.0:5000->5000/tcp   registry[anovil@ubuntu-anovil remove-registry]$ 

[2] Я создал минимальный файл Dockerfile с помощью всего лишь FROM alpine содержимое и создал alpine:v1 и поместил в мой личный реестр, работающий на localhost:5000. Запросив его из реестра, он вернулся, как и ожидалось.

[anovil@ubuntu-anovil remove-registry]$ curl -X GET localhost:5000/v2/alpine/tags/list{"name":"alpine","tags":["v1"]}[anovil@ubuntu-anovil remove-registry]$ 

[3] Затем я вхожу в реестр с помощью docker exec и проверил использование диска, прежде чем я проведу свой эксперимент

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     2.5M    /var/lib/registry/2.5M    totalroot@88f8e1a1d7a7:/# 

[4] Вернувшись обратно на свой хост, я скопировал тяжелый файл (mongodb.tgz) в свой контейнер и создал встроенную и запущенную версию v2.

[anovil@ubuntu-anovil remove-registry]$ docker build -t localhost:5000/alpine:v2 .Sending build context to Docker daemon 61.99 MBStep 1 : FROM alpine ---> 2314ad3eeb90Step 2 : COPY mongodb.tgz /mongodb.tgz ---> d7c7645a3fe2Successfully built d7c7645a3fe2[anovil@ubuntu-anovil remove-registry]$ docker push localhost:5000/alpine:v2The push refers to a repository [localhost:5000/alpine] (len: 1)d7c7645a3fe2: Pushed 5ff05309724e: Image already exists v2: digest: sha256:7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774 size: 4467[anovil@ubuntu-anovil remove-registry]$ 

[5] После повторной проверки размера в реестре он увеличился до 62 МБ:

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                                                                               62M /var/lib/registry/62M totalroot@88f8e1a1d7a7:/# 

[6] Для того, чтобы запустить delete_docker_registry_image, вам нужно поместить скрипт в контейнер, в котором размещен реестр, один из вариантов сделать это с помощью curl. Кроме того, для этого скрипта требуется jq.

root@88f8e1a1d7a7:/# apt-get update && apt-get install -y curl jq...root@88f8e1a1d7a7:/#

[7] Запустите скрипт, попробуйте с --dry-run вариант первый и не забудьте тег версии (в данном случае v2), там также есть хороший -h

root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2 --dry-runDRY_RUN: would have deleted tag directory: repositories/alpine/_manifests/tags/v2DRY_RUN: would have deleted manifest revision: repositories/alpine/_manifests/revisions/sha256/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted directory: blobs/sha256/e2/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6DRY_RUN: would have deleted directory: blobs/sha256/7a/7ada67971e952e353ab14d8f9bdd4e41e4c41099b05a5da09f2700b51d93908aDRY_RUN: would have deleted directory: blobs/sha256/7b/7bea1ec2910170bd88412b622aee6129791673cf1fd8c0e1e34f15ec26428774DRY_RUN: would have deleted layer metadata directory: repositories/alpine/_layers/sha256/e2cc9aed084e01fa5cf93c09121035ac4d712113425ae68b678c28591beec5c6root@88f8e1a1d7a7:/# delete_docker_registry_image --image alpine:v2          root@88f8e1a1d7a7:/#

[8] И вуаля!!

root@88f8e1a1d7a7:/# du -sch /var/lib/registry/                     2.5M    /var/lib/registry/2.5M    totalroot@88f8e1a1d7a7:/#