Skip to content

Instantly share code, notes, and snippets.

@vglebov
Last active March 28, 2020 09:37
Show Gist options
  • Save vglebov/71fd794d5901e1492848cd281dc445fb to your computer and use it in GitHub Desktop.
Save vglebov/71fd794d5901e1492848cd281dc445fb to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
REPO_URL='http://registry.example.com:5000/v2'
function docker-repo-catalog () {
curl ${REPO_URL}/_catalog 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json' |
jq -j ".repositories"
}
function docker-repo-tags-list () {
curl "${REPO_URL}/$1/tags/list" 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json' |
jq -j ".tags"
}
function docker-repo-image-manifest-head () {
curl --head "${REPO_URL}/$1/manifests/$2" 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
}
function docker-repo-image-manifest-get () {
curl -X GET "${REPO_URL}/$1/manifests/$2" 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
}
function docker-repo-delete-image () {
printf "docker-repo-delete-image ${1}:${2} ${3}"
uri="${REPO_URL}/$1/manifests/$3"
curl -X DELETE "${uri}" 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
}
function docker-repo-delete-repo () {
uri="${REPO_URL}/repositories/$1"
curl -X DELETE "${uri}" 2>/dev/null \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
}
function docker-repo-delete-layer () {
uri="${REPO_URL}/$1/blobs/$2"
curl -X DELETE "${uri}" \
-H 'Accept: application/vnd.docker.distribution.manifest.v2+json'
}
function get_digest_from_manifest_head () {
docker-repo-image-manifest-head $1 $2 | grep 'Docker-Content-Digest' | awk '{print $2}' | sed 's/\r//g'
}
function delete_all () {
repositories=$(docker-repo-catalog | grep "$1" | sed 's/[ ",]//g')
for repository in ${repositories}; do
# docker-repo-tags-list ${repository}
tags=$(docker-repo-tags-list ${repository} | sed 's/[\[\] ",]//g')
for tag in ${tags}; do
didgest=$(get_digest_from_manifest_head "${repository}" "${tag}")
docker-repo-delete-image "${repository}" "${tag}" "${didgest}"
done
# FIXME docker-repo-delete-repo выдает 404 ошибку
docker-repo-delete-repo ${repository}
done
}
docker-repo-catalog
delete_all ".*"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment