Zu Forschungszwecken versuche ich, die öffentliche Docker-Registrierung zu crawlen ( https://registry.hub.docker.com/ ) zu crawlen und herauszufinden, 1) wie viele Ebenen ein durchschnittliches Bild hat und 2) wie groß diese Ebenen sind, um eine zu erhalten Idee der Verteilung.
Ich habe jedoch die API und die öffentlichen Bibliotheken sowie die Details zum Github studiert, kann aber keine Methode finden, um:
- Rufen Sie alle öffentlichen Repositorys / Bilder ab (selbst wenn dies Tausende sind, benötige ich noch eine Startliste, um sie zu durchlaufen).
- Finde alle Ebenen eines Bildes
- Finden Sie die Größe für eine Ebene (also nicht für ein Bild, sondern für die einzelne Ebene).
Kann mir jemand helfen, einen Weg zu finden, um diese Informationen abzurufen?
Danke dir!
BEARBEITEN: Kann jemand überprüfen, ob bei der Suche nach '*' in der Docker-Registrierung alle Repositorys zurückgegeben werden und nicht nur irgendetwas, das irgendwo '*' erwähnt? https://registry.hub.docker.com/search?q=*
image
docker
web-crawler
user134589
quelle
quelle
docker history myimage
und du wirst die Größe jeder Ebene sehen. Allgemeiner können Sie auf einem Bilddocker history myimage | awk 'NR>1 {print $1}' | xargs docker inspect --format '{{ ((index .ContainerConfig.Cmd ) 0) }}'
sehen, welche Befehle zum Erstellen des Bildes ausgegeben wurdenhttps://registry.hub.docker.com/search?q=*
zeigt für mich 87031 Repositories,Antworten:
Sie finden die Ebenen der Bilder im Ordner / var / lib / docker / aufs / Ebenen. Geben Sie an, ob Sie den Speichertreiber als aufs konfiguriert haben (Standardoption).
Beispiel:
Zeigen Sie nun die Ebenen der Container an, die mit dem Image "Ubuntu" erstellt wurden. Gehen Sie zum Verzeichnis / var / lib / docker / aufs / layer und katzen Sie, dass die Datei mit der Container-ID beginnt (hier ist es 0ca502fa6aae *).
Dies zeigt das Ergebnis derselben durch Ausführen
Anzeigen der vollständigen Ebenen-ID; Führen Sie die Option --no-trunc als Teil des Verlaufsbefehls aus.
quelle
docker history
Der Befehl gibt die Bildebenen nicht an, wie im Ordner / var / lib / docker / aufs / layer angezeigt. Lesen Sie das Update hier .docker history
Der Befehl teilt nicht mehr die tatsächlichen Speicherinformationen der Layer-Festplatte auf dem Docker-Host mit. Überprüfen Sie diesen BlogSie finden die Bild-ID zunächst mit:
Suchen Sie dann die Bildebenen und ihre Größen:
Hinweis: Ich verwende Docker Version 1.13.1
quelle
Schauen Sie sich tauchen in golang geschrieben.
Super Werkzeug!
quelle
Meiner Meinung nach
docker history <image>
ist ausreichend. Dies gibt die Größe jeder Ebene zurück:quelle
Sie haben hier eine sehr gute Antwort: https://stackoverflow.com/a/32455275/165865
Führen Sie einfach die folgenden Bilder aus:
quelle
Dadurch wird das Docker-Bild überprüft und die Ebenen gedruckt:
quelle
ein weiteres Tool: https://github.com/CenturyLinkLabs/dockerfile-from-image
GUI mit ImageLayers.io
quelle
https://hub.docker.com/search?q=* zeigt alle Bilder im gesamten Docker-Hub an. Dies kann nicht über den Suchbefehl abgerufen werden, da keine Platzhalter akzeptiert werden.
Ab Version 1.10 können Sie alle Ebenen in einem Bild finden, indem Sie es ziehen und die folgenden Befehle verwenden:
3) Die Größe kann in gefunden werden,
/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size
obwohl LAYERID! = Die diff_ids, die mit dem vorherigen Befehl gefunden wurden. Dazu müssen Sie/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff
die vorherige Befehlsausgabe betrachten und mit ihr vergleichen, um die richtige diff_id und Größe richtig abzugleichen.quelle
Es ist in der Tat möglich, die Manifest- oder Blob-Informationen vom Docker-Registrierungsserver ohne abzufragen das Image auf die lokale Festplatte zu ziehen.
Sie können auf die Registry v2-API verweisen, um das Bildmanifest abzurufen.
Beachten Sie, dass Sie mit verschiedenen Manifestversionen umgehen müssen. Für v2 können Sie direkt die Größe der Schicht und den Digest des Blobs ermitteln. Für v1 manifest können Sie die Blob-Download-URL HEADEN, um die tatsächliche Ebenengröße zu erhalten.
Es gibt ein einfaches Skript für die Behandlung der oben genannten Fälle, das kontinuierlich gepflegt wird.
quelle
Nicht genau die ursprüngliche Frage, aber um die Gesamtsumme aller Bilder zu ermitteln, ohne gemeinsam genutzte Ebenen doppelt zu zählen, ist Folgendes hilfreich (Ubuntu 18):
quelle
Ich habe dieses Problem mithilfe der Suchfunktion auf der Docker-Website gelöst, wobei '*' eine gültige Suche ist, die 200.000 Repositorys zurückgibt, und dann jede einzelne Seite gecrawlt habe. Durch HTML-Analyse kann ich alle Bildnamen auf jeder Seite extrahieren.
quelle