2015-04-17 12 views
31

Per scopi 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 livelli avere un'idea della distribuzione.Trovare i livelli e le dimensioni dei livelli per ciascuna immagine del Docker

Tuttavia ho studiato la librerie API e pubblici, nonché i dettagli sul GitHub, ma non posso trovare qualsiasi metodo per:

  • recuperare tutti i repository pubblici/immagini (anche se questi sono migliaia devo ancora una lista di partenza per scorrere)
  • trovare tutti i livelli di un'immagine
  • trovare 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!

MODIFICA: qualcuno può verificare che la ricerca di "*" nel Registro di sistema Docker restituisca tutti i repository e non solo tutto ciò che menziona "*" ovunque? https://registry.hub.docker.com/search?q=*

+5

>>> trova tutti i livelli di un'immagine, se non si utilizza l'API, è possibile eseguire una 'finestra di diapositiva myimage' e si vedrà la dimensione di ogni livello. Più in generale, su un'immagine, puoi eseguire la 'storia della finestra mobile myimage | awk 'NR> 1 {print $ 1}' | xargs docker inspect --format '{{((index .ContainerConfig.Cmd) 0)}}' 'per vedere quali comandi sono stati emessi per creare l'immagine – user2915097

+0

Questo è già un grande aiuto per il passo 2 anche se questo richiede di scaricare ogni immagine tramite Docker sulla mia macchina locale. Immagino che sia un'opzione, ma solo se trovo un modo per recuperare un elenco di "myimages" con cui iniziare (ad esempio, ogni immagine nel registro pubblico nel passaggio 1). Esplorerò sicuramente questa opzione, grazie! – user134589

+0

'https: //registry.hub.docker.com/search? Q = *' mostra per me repository 87031, – user2915097

risposta

36

È possibile trovare i livelli delle immagini nella cartella/var/lib/docker/aufs/layers; fornire se è stata configurata per l'archiviazione driver aufs (opzione di default) come

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 

per conoscere gli strati dei contenitori che sono stati creati con l'immagine "Ubuntu"; andare a/var/lib/finestra mobile/aufs/directory strati e gatto il file inizia con l'ID 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 
+0

Questo non è più il caso con la versione docker 1.10 in poi. Il comando 'history docker' non darà i livelli dell'immagine come mostrato nella cartella/var/lib/docker/aufs/layers. Leggi l'aggiornamento [qui] (https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/#copying-makes-containers-efficient). –

+0

Dalla versione 1.10 di Docker, con l'introduzione della memoria indirizzabile ai contenuti, le immagini e i livelli sono ora separati. Il comando 'history della finestra mobile 'non indica più le informazioni sulla memoria del disco di livello reale nell'host della finestra mobile. Controlla questo [blog] (http://windsock.io/explaining-docker-image-ids/) –

5

là hanno una risposta molto buona qui: https://stackoverflow.com/a/32455275/165865

basta eseguire sotto le immagini:

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

+1

Ciao @bummi, scusa penso che inizialmente questa domanda cerchi la soluzione nel registro docker e ho trovato la soluzione che abbiamo fornito sopra direttamente agli strati dell'immagine del docker. quindi provo a integrare un'altra soluzione (che ritengo più facile) – sunnycmf

0

Ho risolto questo problema utilizzando la funzione di ricerca sul sito web di Docker dove "*" è una ricerca valida che restituisce repository 200k e quindi ho sottoposto a scansione ogni pagina inviduale. L'analisi HTML mi consente di estrarre tutti i nomi delle immagini su ciascuna pagina.

+0

: D ma non è davvero una risposta seria ... –

2
  1. https://hub.docker.com/search?q=* mostra tutte le immagini in tutto il mozzo Docker, non è possibile ottenere questo tramite il comando di ricerca, come si pretende molto accettare i caratteri jolly.

  2. Come di v1.10 si possono trovare tutti i livelli di un'immagine tirandolo e l'utilizzo di 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 trovato in /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size anche se layerId = i diff_ids trovati con il comando precedente. Per questo è necessario guardare /var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff e confrontare con l'output del comando precedente per abbinare correttamente il diff_id e le dimensioni corrette.

+0

RE1) Non ha funzionato per me sembra reindirizzare a hub.docker.com. – joedragons

+0

finestra mobile ispeziona il nome immagine | jq. []. RootFS.Layers "è un modo molto più semplice di fare 2) – wheredidthatnamecomefrom

Problemi correlati