J'utilise Docker Registry v1 et je suis intéressé par la migration vers la nouvelle version, v2. Mais il me faut un moyen d’obtenir une liste des images présentes dans le registre; Par exemple, avec le registre v1, je peux exécuter une requête GET sur http://myregistry:5000/v1/search?
et le résultat est le suivant:
{
"num_results": 2,
"query": "",
"results": [
{
"description": "",
"name": "deis/router"
},
{
"description": "",
"name": "deis/database"
}
]
}
Mais je ne trouve pas sur documentation officielle quelque chose de similaire pour obtenir une liste d'images sur le registre. Tout le monde connaît un moyen de le faire sur la nouvelle version v2?
Pour la dernière version (à compter du 2015-07-31) de Registry V2, vous pouvez obtenir cette image auprès de DockerHub:
docker pull distribution/registry:master
Lister tous les dépôts (images effectivement):
curl -X GET https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}
Répertoriez toutes les balises d'un référentiel:
curl -X GET https://myregistry:5000/v2/ubuntu/tags/list
> {"name":"ubuntu","tags":["14.04"]}
vous pouvez rechercher sur
http: //
<ip/hostname>
:<port>
/v2/_catalog
Par défaut, api de registre retourne 100 entrées de catalogue, il y a le code :
Lorsque vous curlez l’API de registre:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
il est équivalent avec:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100
Ceci est une méthode de pagination.
Lorsque la somme des entrées est supérieure à 100, vous pouvez le faire de deux manières:
First: donne un plus grand nombre
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000
Sencond: analyser la prochaine URL de l'éditeur de liens
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
Un élément de lien contenu dans l'en-tête de la réponse:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
en-tête de réponse:
Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"
L'élément de lien a la dernière entrée de cette demande, alors vous pouvez demander la 'page' suivante:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws
Si l'en-tête de la réponse contient l'élément link, vous pouvez le faire dans un loop.
Lorsque vous obtenez le résultat du catalogue, il se présente comme suit:
{
"repositories": [
"busybox",
"ceph/mds"
]
}
vous pouvez obtenir les images dans chaque catalogue:
curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list
résultats:
{"name":"busybox","tags":["latest"]}
La dernière version de Docker Registry disponible à partir de https://github.com/docker/distribution prend en charge l’API de catalogue. (v2/_catalog). Cela permet de rechercher des référentiels
Si cela vous intéresse, vous pouvez essayer la CLI que j'ai construite avec Docker Image Registry pour simplifier l'utilisation des fonctions de recherche dans la nouvelle distribution de Docker Registry ( https://github.com/vivekjuneja/docker_registry_cli ).
Cela m'a rendu fou, mais j'ai finalement rassemblé toutes les pièces. À compter du 25/01/2015, j'ai confirmé qu'il était possible de répertorier les images dans le registre de docker V2 (exactement comme @jonatan mentionné ci-dessus.)
Je voterais cette réponse, si j'avais le représentant pour cela.
Au lieu de cela, je vais développer la réponse. Étant donné que le registre V2 est conçu dans un souci de sécurité, je pense qu'il convient d'inclure comment le configurer avec un certificat auto-signé , et exécuter le conteneur avec ce certificat afin qu'un appel https puisse être fait avec ce cert:
C’est le script que j’utilise réellement pour démarrer le registre:
Sudo docker stop registry
Sudo docker rm -v registry
Sudo docker run -d \
-p 5001:5001 \
-p 5000:5000 \
--restart=always \
--name registry \
-v /data/registry:/var/lib/registry \
-v /root/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-e REGISTRY_HTTP_DEBUG_ADDR=':5001' \
registry:2.2.1
Cela peut sembler évident à certains, mais je me mêle toujours de clés et de certs. Le fichier qui doit être référencé pour que l'appel @jonaton mentionne ci-dessus ** est le domaine.crt répertorié ci-dessus. (Depuis que j'ai mis domain.crt dans /root
, j'ai fait une copie dans le répertoire de l'utilisateur où il pourrait être consulté.)
curl --cacert ~/domain.crt https://myregistry:5000/v2/_catalog
> {"repositories":["redis","ubuntu"]}
** La commande ci-dessus a été modifiée: -X GET n'a pas fonctionné lorsque j'ai essayé.
Remarque: https://myregistry:5000
(comme ci-dessus) doit correspondre au domaine attribué au certificat généré.
Veuillez consulter la réponse de @ jonathan ci-dessous , ou la documentation de l'API de registre ici: https://docs.docker.com/registry/spec/api/
Si vous recherchez "listing", vous verrez que le support a été ajouté dans la version e
.
Nous avons conçu un outil de ligne de commande à cette fin: docker-ls Il vous permet de parcourir un registre de dockers et prend en charge l’authentification via un jeton ou une autorisation de base.
Installer le registre: 2.1.1 ou une version ultérieure (vous pouvez vérifier le dernier, ici ) et utiliser GET/v2/_catalog pour obtenir la liste.
https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories
Liste toutes les images par exemple de script shell: https://Gist.github.com/OndrejP/a2386d08e5308b0776c0
Avec les points de terminaison "/ v2/_catalog" et "/ tags/list", vous ne pouvez pas vraiment lister toutes les images. Si vous avez poussé quelques images différentes et les avez étiquetées "dernières", vous ne pouvez pas vraiment lister les anciennes images! Vous pouvez toujours les tirer si vous vous y référez en utilisant digest "docker pull ubuntu @ sha256: ac13c5d2 ...". La réponse est donc: il n'y a aucun moyen de lister les images, vous pouvez seulement lister les tags qui ne sont pas les mêmes
Si certains vont aussi loin.
Prenant ce que d'autres ont déjà dit ci-dessus. Voici un one-liner qui place la réponse dans un fichier texte au format JSON.
curl "http://mydocker.registry.domain/v2/_catalog?n=2000" | jq . - > /tmp/registry.lst
Cela ressemble à
{
"repositories": [
"somerepo/somecontiner",
"somerepo_other/someothercontiner",
...
]
}
Vous devrez peut-être modifier le paramètre «? N = xxxx» pour qu'il corresponde à votre nombre de conteneurs.
Suivant est un moyen de supprimer automatiquement les conteneurs anciens et inutilisés.
La fonctionnalité de registre v2 de Docker Search n'est actuellement pas prise en charge au moment de la rédaction de cet article. Voir discussion depuis février 2015: "propose une fonctionnalité de recherche dans le registre # 206" https://github.com/docker/distribution/issues/206
J'ai écrit un script que vous pouvez trouver: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 Ce n'est pas joli mais il obtient les informations nécessaires du privé enregistrement.
Je devais faire la même chose ici et les travaux ci-dessus, sauf que je devais fournir les informations de connexion car il s'agissait d'un référentiel local de docker.
C'est comme ci-dessus mais en fournissant le nom d'utilisateur/mot de passe dans l'URL.
curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog
Il revient sous forme de JSON non formaté.
Je l'ai fait passer par le formateur Python pour faciliter la lecture humaine, au cas où vous souhaiteriez l'avoir dans ce format.
curl -k -X GET https://yourusername:yourpassword@theregistryURL/v2/_catalog | python -m json.tool
J'ai écrit un outil de ligne de commande facile à utiliser pour lister les images de différentes manières (comme lister toutes les images, lister toutes les balises de ces images, lister toutes les couches de ces balises).
Il vous permet également de supprimer des images inutilisées de différentes manières, par exemple en supprimant uniquement les anciennes balises d’une seule image ou de toutes les images, etc. Ceci est pratique lorsque vous remplissez votre base de registre à partir d’un serveur CI et souhaitez conserver uniquement les versions les plus récentes/stables.
Il est écrit en python et n'a pas besoin de télécharger de grandes images de registre volumineuses et personnalisées.
Voici un joli petit manchon (utilise JQ) pour imprimer une liste de dépôts et d’étiquettes associées.
Si vous n'avez pas installé jq
, vous pouvez utiliser: brew install jq
# This is my URL but you can use any
REPO_URL=10.230.47.94:443
curl -k -s -X GET https://$REPO_URL/v2/_catalog \
| jq '.repositories[]' \
| sort \
| xargs -I _ curl -s -k -X GET https://$REPO_URL/v2/_/tags/list
Voici un exemple qui répertorie toutes les balises de toutes les images du registre. Il gère également un registre configuré pour l'authentification HTTP Basic.
THE_REGISTRY=localhost:5000
# Get username:password from docker configuration. You could
# inject these some other way instead if you wanted.
CREDS=$(jq -r ".[\"auths\"][\"$THE_REGISTRY\"][\"auth\"]" .docker/config.json | base64 -d)
curl -s --user $CREDS https://$THE_REGISTRY/v2/_catalog | \
jq -r '.["repositories"][]' | \
xargs -I @REPO@ curl -s --user $CREDS https://$THE_REGISTRY/v2/@REPO@/tags/list | \
jq -M '.["name"] + ":" + .["tags"][]'
Explication:
Chaque registre étant exécuté en tant que conteneur, l'ID de conteneur a un fichier journal associé ID-json.log, ce fichier journal contient vars.name = [image] et vars.reference = [tag]. Un script peut être utilisé pour les extrapoler et les imprimer. C'est peut-être une méthode pour lister les images envoyées au registre V2-2.0.1.