Je voudrais tirer les images de centos, Tomcat, ... en utilisant leur code sha256, comme dans
docker pull myimage@sha256:0ecb2ad60
mais je ne trouve pas le code sha256 à utiliser n'importe où.
J'ai vérifié dans le référentiel dockerhub la moindre trace du code sha256, mais je n'ai pas pu en trouver. J'ai téléchargé les images par leur tag
docker pull Tomcat:7-jre8
et vérifié l'image avec docker inspect
pour voir s'il y a un code sha256 dans les métadonnées, mais il n'y en a pas (l'ajout du code sha256 de l'image changerait probablement le code sha256).
Dois-je calculer moi-même le code sha256 d'une image et l'utiliser?
Je viens de le voir:
Lorsque je tire une image, le code sha256 est affiché au bas de la sortie (Digest: sha ....):
docker pull Tomcat:7-jre8
7-jre8: Pulling from library/Tomcat
902b87aaaec9: Already exists
9a61b6b1315e: Already exists
...
4dcef5c50d60: Already exists
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for Tomcat:7-jre8
Ce code sha
sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
peut être utilisé pour tirer l'image ensuite avec
docker pull Tomcat @ sha256: c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
De cette façon, vous pouvez être sûr que l'image n'est pas modifiée et qu'elle peut être utilisée en toute sécurité pour la production.
Modification suggérée par OhJeez dans les commentaires.
docker inspect --format='{{index .RepoDigests 0}}' $IMAGE
Je crois que vous pouvez également obtenir ceci en utilisant
docker inspect --format='{{.RepoDigests}}' $IMAGE
Ne fonctionne que dans Docker 1.9 et si l’image a été tirée à l’origine par le résumé. Les détails sont sur le traqueur de problèmes de docker.
Vous pouvez l'obtenir par docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
docker/ucp-agent 2.1.0 sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3 583407a61900 3 weeks ago 22.3 MB
Outre les réponses existantes, vous pouvez utiliser l'option --digests
en docker images
pour obtenir une liste des résumés de toutes les images que vous avez.
docker images --digests
Vous pouvez ajouter un grep pour approfondir
docker images --digests | grep Tomcat
Cela aurait dû être le champ Id, que vous pouviez voir dans l'ancien obsolèteAPI Docker Hub
GET /v1/repositories/foo/bar/images HTTP/1.1
Host: index.docker.io
Accept: application/json
Parameters:
namespace – the namespace for the repo
repo_name – the name for the repo
Exemple de réponse:
HTTP/1.1 200
Vary: Accept
Content-Type: application/json
[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]
MAIS: c’est pas comment cela fonctionne maintenant avec la nouvelle distribution de menu fixe.
Voir numéro 628: "Obtenir l’ID image avec le nom de balise"
La réponse du registre
/v1/
/repositories/<repo>/tags
utilisée pour répertorier l'ID de l'image avec le descripteur de balise./v2/
semble seulement donner le manche.Il serait utile d’obtenir l’ID à comparer à l’ID trouvé localement. Le seul endroit où je peux trouver l'ID se trouve dans la section
v1Compat
du manifeste (ce qui est excessif pour l'info que je veux)
La réponse actuelle (mi-2015) est la suivante:
Cette propriété de l'API V1 était très coûteuse en calcul de la manière dont les images sont stockées sur le backend. Seuls les noms de balises sont énumérés pour éviter une recherche secondaire.
De plus, l'API V2 ne traite pas les ID d'image. Au lieu de cela, il utilise des résumés pour identifier les calques, qui peuvent être calculés comme une propriété du calque et sont vérifiables indépendamment.
Il suffit d'émettre à nouveau docker pull Tomcat:7-jre8
et vous obtiendrez ce que vous voulez.