Да, они не сделали это простым, и это все еще не идеально, но API реестра v2 теперь имеет возможность удалять изображения.
Могу ли я просто и просто удалить папку v2/repositories/IMAGE_NAME/_manifests/tags/VERSION
Фактические данные изображения хранятся в каталоге больших двоичных объектов на диске, но они являются общими для разных манифестов, поэтому небезопасно просто удалять этот каталог, если вы не рассмотрели все изображения, которые могут совместно использовать большие двоичные объекты.
Вот способ удаления изображения с помощью API docker версии v2:
Во-первых, в вашем реестре должно быть включено УДАЛЕНИЕ. Либо установите env var:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
или в конфигурации.yml должен установить
storage: delete: enabled: true
Затем запустите удаление с помощью вызовов API (Вы можете легко протестировать с помощью Postman или просто с помощью curl / etc)
записка: В приведенных ниже вызовах добавьте "Accept: application/vnd.docker.distribution.manifest.v2+json"
к заголовку HTTP
Сбор дайджеста изображений:
HEAD https://myprivateregistry:5001/v2/<image_name>/manifests/<image_tag>
Этот вызов возвращает ключ заголовка Docker-Content-Digest
с таким значением, как это: sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
Используя это значение из шага 2, запустите DELETE
http-вызов:
DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
API возвращает 202 Accepted
Запустите сборку мусора вручную, если вы не хотите ждать ее следующего запланированного запуска: registry garbage-collect /etc/docker/registry/config.yml
Пример при запуске реестра в качестве контейнера: docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml
Сборщик мусора удаляет связанные двоичные объекты и манифестирует их с диска для вас.
На этом этапе image:tag полностью удаляется с диска и удаляется из реестра. Большие двоичные объекты будут удалены, и вы увидите, что манифесты исчезли из v2/repositories/<image_name>/_manifests
ПРИМЕЧАНИЕ: Если это было последнее изображение в вашем репозитории, вам все равно придется вручную удалить список репозитория с диска (v2/repositories/<image_name>/_layers
) - однако это всего лишь метаданные. Фактические данные изображения уже удалены. Я полагаю, что это может быть ошибка в сборщике мусора. У меня есть вопрос по этому поводу здесь: Личный реестр Docker - Удалены все изображения, но они все еще отображаются в каталоге
БОЛЕЕ ПОДРОБНАЯ ИНФОРМАЦИЯ:
https://docs.docker.com/registry/spec/api/#deleting-an-imagehttps://jsosic.wordpress.com/2017/01/23/deleting-images-from-docker-registry/