web-dev-qa-db-fra.com

Recherche des calques et des tailles de calque pour chaque image Docker

À des fins de recherche, j'essaie d'explorer le registre public de Docker ( https://registry.hub.docker.com/ ) et de découvrir 1) combien de couches une image moyenne contient et 2) la taille de ces couches pour avoir une idée de la distribution.

Cependant, j'ai étudié l'API et les bibliothèques publiques ainsi que les détails sur le github mais je ne trouve aucune méthode pour:

  • récupérer tous les référentiels publics/images (même s'il y en a des milliers, j'ai encore besoin d'une liste de départ pour pouvoir parcourir)
  • trouver toutes les couches d'une image
  • trouver la taille d'un calque (donc pas d'une image mais d'un calque individuel).

Quelqu'un peut-il m'aider à trouver un moyen de récupérer cette information?

Je vous remercie!

EDIT: est-ce que quelqu'un est capable de vérifier que la recherche de '*' dans le registre Docker renvoie tous les référentiels et pas seulement tout ce qui mentionne '*' n'importe où? https://registry.hub.docker.com/search?q=*

55
user134589

Vous pouvez trouver les calques des images dans le dossier/var/lib/docker/aufs/layers; indiquer si vous avez configuré le pilote de stockage comme aufs (option par défaut) 

Exemple:

 docker ps -a
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
 0ca502fa6aae        ubuntu              "/bin/bash"         44 minutes ago      Exited (0) 44 seconds ago                       DockerTest

Maintenant, pour voir les couches des conteneurs qui ont été créés avec l'image "Ubuntu"; Allez dans le répertoire/var/lib/docker/aufs/layers et relancez le fichier avec l'identifiant du conteneur (ici 0ca502fa6aae *)

 root@viswesn-vm2:/var/lib/docker/aufs/layers# cat    0ca502fa6aaefc89f690736609b54b2f0fdebfe8452902ca383020e3b0d266f9-init 
 d2a0ecffe6fa4ef3de9646a75cc629bbd9da7eead7f767cb810f9808d6b3ecb6
 29460ac934423a55802fcad24856827050697b4a9f33550bd93c82762fb6db8f
 b670fb0c7ecd3d2c401fbfd1fa4d7a872fbada0a4b8c2516d0be18911c6b25d6
 83e4dde6b9cfddf46b75a07ec8d65ad87a748b98cf27de7d5b3298c1f3455ae4

Cela montrera le résultat de même en lançant 

root@viswesn-vm2:/var/lib/docker/aufs/layers# docker history ubuntu
IMAGE               CREATED             CREATED BY                                         SIZE                COMMENT
d2a0ecffe6fa        13 days ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
29460ac93442        13 days ago         /bin/sh -c sed -i 's/^#\s*\   (deb.*universe\)$/   1.895 kB            
b670fb0c7ecd        13 days ago         /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic   194.5 kB            
83e4dde6b9cf        13 days ago         /bin/sh -c #(nop) ADD file:c8f078961a543cdefa   188.2 MB 

Pour afficher l’identifiant complet de la couche; exécuté avec l'option --no-trunc dans le cadre de la commande history.

docker history --no-trunc ubuntu
57
Viswesn

Voici un bon article sur Afficher les couches de l'image Docker

Vous pouvez d'abord trouver l'ID de l'image:

$ docker images -a

Trouvez ensuite les couches et leurs tailles:

$ docker history --no-trunc <Image ID>

Note: J'utilise Docker version 1.13.1

$ docker -v
Docker version 1.13.1, build 092cba3
15
Yuci

Ils ont une très bonne réponse ici: https://stackoverflow.com/a/32455275/165865

Il suffit de lancer ci-dessous les images:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nate/dockviz images -t
9
sunnycmf

Cela inspectera l'image du menu fixe et imprimera les calques:

$ docker image inspect nginx -f '{{.RootFS.Layers}}'
[sha256:d626a8ad97a1f9c1f2c4db3814751ada64f60aed927764a3f994fcd88363b659 sha256:82b81d779f8352b20e52295afc6d0eab7e61c0ec7af96d85b8cda7800285d97d sha256:7ab428981537aa7d0c79bc1acbf208c71e57d9678f7deca4267cc03fba26b9c8]
4
lvthillo

À mon avis, docker history <image> est suffisant. Ceci retourne la taille de chaque couche.

$ docker history jenkinsci-jnlp-slave:2019-1-9c
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
93f48953d298        42 minutes ago      /bin/sh -c #(nop)  USER jenkins                 0B
6305b07d4650        42 minutes ago      /bin/sh -c chown jenkins:jenkins -R /home/je…   1.45GB

Ce qui m'a surpris, c'est que le simple fait de changer de propriétaire a créé une énorme tâche.

2
030
  1. https://hub.docker.com/search?q=* affiche toutes les images de l'ensemble du hub Docker. Il est impossible de l'obtenir via la commande de recherche car elle n'accepte pas les caractères génériques.

  2. À partir de la version 1.1, vous pouvez trouver toutes les couches d'une image en la tirant et en utilisant les commandes suivantes:

    docker pull ubuntu
    ID=$(Sudo docker inspect -f {{.Id}} ubuntu)
    jq .rootfs.diff_ids /var/lib/docker/image/aufs/imagedb/content/$(echo $ID|tr ':' '/')
    

3) La taille peut être trouvée dans /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size bien que LAYERID! = Les diff_ids trouvés avec la commande précédente. Pour cela, vous devez regarder /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff et comparer avec le résultat de la commande précédente pour faire correspondre correctement le diff_id et la taille corrects.

2
Piet

encore un outil: https://github.com/CenturyLinkLabs/dockerfile-from-image

GUI utilisant ImageLayers.io 

1
resultsway

Peut vérifier plongée écrit en golang. 

Outil génial.

Vous pouvez ajuster le code source afin qu'il exporte toutes les informations affichées dans un fichier json.

0
Levon