it-swarm.dev

Trovare i livelli e le dimensioni dei livelli per ciascuna immagine del Docker

A scopo di ricerca, sto cercando di eseguire la scansione del registro Docker pubblico ( https://registry.hub.docker.com/ ) e di scoprire 1) quanti livelli ha un'immagine media e 2) le dimensioni di questi strati per avere un'idea della distribuzione.

Tuttavia ho studiato l'API e le librerie pubbliche, nonché i dettagli sul github ma non riesco a trovare alcun metodo per:

  • recuperare tutti i repository/immagini pubblici (anche se quelli sono migliaia ho ancora bisogno di una lista di partenza per scorrere)
  • trova tutti i livelli di un'immagine
  • trova la dimensione per un livello (quindi non un'immagine ma per il singolo livello).

Qualcuno può aiutarmi a trovare un modo per recuperare queste informazioni?

Grazie!

EDIT: qualcuno è in grado di verificare che la ricerca di "*" nel registro Docker sta restituendo tutti i repository e non solo tutto ciò che menziona "*" ovunque? https://registry.hub.docker.com/search?q=*

55
user134589

Puoi trovare i livelli delle immagini nella cartella/var/lib/docker/aufs/layers; fornire se si è configurato per il driver di archiviazione come aufs (opzione predefinita) 

Esempio:

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

Ora per visualizzare i livelli dei contenitori che sono stati creati con l'immagine "Ubuntu"; vai alla directory/var/lib/docker/aufs/layers e cat il file inizia con l'ID del contenitore (qui è 0ca502fa6aae *)

 [email protected]:/var/lib/docker/aufs/layers# cat    0ca502fa6aaefc89f690736609b54b2f0fdebfe8452902ca383020e3b0d266f9-init 
 d2a0ecffe6fa4ef3de9646a75cc629bbd9da7eead7f767cb810f9808d6b3ecb6
 29460ac934423a55802fcad24856827050697b4a9f33550bd93c82762fb6db8f
 b670fb0c7ecd3d2c401fbfd1fa4d7a872fbada0a4b8c2516d0be18911c6b25d6
 83e4dde6b9cfddf46b75a07ec8d65ad87a748b98cf27de7d5b3298c1f3455ae4

Questo mostrerà il risultato della stessa eseguendo 

[email protected]:/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 

Per visualizzare l'ID del livello completo; eseguire con l'opzione --no-trunc come parte del comando history.

docker history --no-trunc ubuntu
57
Viswesn

Ecco un buon articolo su Mostra livelli di immagine Docker

Puoi prima trovare l'ID dell'immagine:

$ docker images -a

Quindi trova i suoi strati e le loro dimensioni:

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

Nota: sto utilizzando la versione 1.13.1 di Docker

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

Hanno un'ottima risposta qui: https://stackoverflow.com/a/32455275/165865

Corri sotto le immagini:

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

Verificherà l'immagine della finestra mobile e stamperà i livelli:

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

A mio parere, docker history <image> è sufficiente. Questo restituisce la dimensione di ogni livello.

$ 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

Ciò che mi ha sorpreso è che il semplice cambiamento del proprietario ha creato un enorme blob.

2
030
  1. https://hub.docker.com/search?q=* mostra tutte le immagini nell'intero hub Docker, non è possibile ottenere questo tramite il comando di ricerca in quanto non accetta i caratteri jolly.

  2. A partire dalla v1.10 puoi trovare tutti i livelli in un'immagine tirandola e usando questi comandi:

    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 dimensione può essere trovata in /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size sebbene LAYERID! = Il diff_ids trovato con il comando precedente. Per questo è necessario esaminare /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff e confrontare con l'output del comando precedente per abbinare correttamente il diff_id e la dimensione corrette.

2
Piet

uno strumento in più: https://github.com/CenturyLinkLabs/dockerfile-from-image

GUI usando ImageLayers.io 

1
resultsway

Puoi controllare immergerti scritto in golang. 

Strumento fantastico.

Puoi regolare il codice sorgente in modo che esporti tutte le informazioni che mostra in un file json.

0
Levon