Sim, eles não tornaram isso fácil e ainda não é perfeito, mas a API de registro v2 agora tem a capacidade de excluir imagens.
Can I simply and savely just remove the folder v2/repositories/IMAGE_NAME/_manifests/tags/VERSION
Os dados da imagem atual são armazenados no diretório de blobs no disco, mas eles são compartilhados entre manifestos diferentes, portanto não é seguro remover apenas esse diretório, a menos que você tenha considerado todas as imagens que possam compartilhar os blobs.
Here is the method to delete an image using the v2 docker API:
Em primeiro lugar, o seu registro precisa ter o DELETE ativado. Ou defina o env var:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
ou no config.yml tem que definir
storage:
delete:
enabled: true
Em seguida, execute a exclusão por meio de chamadas de API (você pode testar facilmente via Postman ou usando curl / etc)
OBSERVAÇÃO: Nas chamadas abaixo, adicione "Accept: application/vnd.docker.distribution.manifest.v2+json"
ao cabeçalho HTTP
-
Reunir resumo de imagens:
HEAD https://myprivateregistry:5001/v2/<image_name>/manifests/<image_tag>
Esta chamada retorna a chave de cabeçalho
Docker-Content-Digest
com um valor como este:sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
-
Usando esse valor da etapa 2, execute a chamada
DELETE
http:DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
API retorna
202 Accepted
-
Execute a coleta de lixo manualmente se você não quiser esperar pela próxima execução programada:
registry garbage-collect /etc/docker/registry/config.yml
Exemplo se estiver executando o registro como um contêiner:
docker exec -t registry-test ./bin/registry garbage-collect /etc/docker/registry/config.yml
O coletor de lixo exclui os blobs e manifestos associados do disco para você.
Neste ponto, a tag image: é completamente excluída do disco e removida do registro. Os blobs são excluídos e você verá os manifestos desaparecerem de v2/repositories/<image_name>/_manifests
NOTA: Se esta foi a última imagem em seu repositório, você ainda terá que excluir manualmente a listagem de repo do disco ( v2/repositories/<image_name>/_layers
) - no entanto, isso é apenas metadados. Os dados da imagem real já foram removidos. Eu acredito que isso pode ser um bug no coletor de lixo. Eu tenho uma pergunta sobre isso aqui: Registro Privado do Docker - Todas as imagens foram excluídas, mas ainda estão sendo exibidas no catálogo
MAIS DETALHES: