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.
Posso simplesmente e savely apenas remover a pasta v2 / repositories / IMAGE_NAME / _manifests / tags / VERSION
Os dados reais da imagem são armazenados no diretório blobs no disco, mas são compartilhados entre diferentes manifestos, portanto, não é seguro apenas limpar esse diretório, a menos que você tenha considerado todas as imagens que podem compartilhar os blobs.
Aqui está o método para excluir uma imagem usando a API v2 docker:
Em primeiro lugar, seu registro deve ter a exclusão ativada. Ou definir o env var:
REGISTRY_STORAGE_DELETE_ENABLED: "true"
ou na configuração.yml tem que definir
storage: delete: enabled: true
Em seguida, execute a exclusão por meio de chamadas de API (Você pode facilmente testar via carteiro ou apenas usando curl / etc)
NOTAR: Nas chamadas abaixo, Adicione "Accept: application/vnd.docker.distribution.manifest.v2+json"
para o cabeçalho HTTP
-
Reunir imagem digest:
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 o DELETE
chamada http:
DELETE https://myprivateregistry:5001/v2/<image_name>/manifests/sha256:b57z31xyz0f616e65f106b424f4ef29185fbd80833255d79dabc73b8eb873bd
API retorna 202 Accepted
-
Execute a coleta de lixo manualmente se não quiser esperar pela próxima execução agendada: 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 desaparecidos v2/repositories/<image_name>/_manifests
Nota: Se esta foi a última imagem em seu repo, você ainda tem que excluir manualmente a listagem de repo do disco (v2/repositories/<image_name>/_layers
)- no entanto, isso é apenas metadados. Os dados reais da imagem já foram removidos. Eu acredito que isso pode ser um bug no coletor de lixo. Eu tenho uma pergunta sobre isso aqui: Docker Private Registry-excluiu todas as imagens, mas ainda está sendo exibido no catálogo
MAIS DETALHES:
https://docs.docker.com/registry/spec/api/#deleting-an-imagehttps://jsosic.wordpress.com/2017/01/23/deleting-images-from-docker-registry/