Wie bestimme ich die Docker-Bildgröße, bevor ich gezogen werde?


34

Wir können auf der Docker-Website nach verfügbaren Bilddateien wie folgt suchen:

Woran erkenne ich die Downloadgröße (n) vor dem Abrufen?

docker.io pull [image]

1
Keine generelle Antwort, aber wenn man sich die Art und Weise ansieht, wie die Ubuntu-Images in Stackbrew erstellt werden , kann man aus den verwendeten Tarballs eine Untergrenze für die Bildgröße erraten . (Für eine vorhersehbare Bandbreitennutzung können Sie die Images auch selbst erstellen - Sie wissen dann, wie viel heruntergeladen wird, dh nur den Tarball selbst.)
sr_

Antworten:


14

Bei der API für Docker, Docker Remote API v1.10 , scheint es keine Möglichkeit zu geben, die Größe der Bilder zu ermitteln. Abschnitt "2.2 Bilder" zeigt die Spezifikation für die Abfrage von Bildern.

Beispiel

    GET /images/json?all=0 HTTP/1.1

**Example response**:

    HTTP/1.1 200 OK
    Content-Type: application/json

    [
      {
         "RepoTags": [
           "ubuntu:12.04",
           "ubuntu:precise",
           "ubuntu:latest"
         ],
         "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c",
         "Created": 1365714795,
         "Size": 131506275,
         "VirtualSize": 131506275
      },
      {
         "RepoTags": [
           "ubuntu:12.10",
           "ubuntu:quantal"
         ],
         "ParentId": "27cf784147099545",
         "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
         "Created": 1364102658,
         "Size": 24653,
         "VirtualSize": 180116135
      }
    ]

Diese Abfrage muss sich jedoch gegen eine tatsächliche Docker-Instanz richten. Hier ist ein Beispiel, das zeigt, wie man die obige RESTful-Abfrage verwenden kann:

$ echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 858
Connection: close
Date: Fri, 20 Dec 2013 16:02:41 GMT

[{"Repository":"ubuntu","Tag":"12.04","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"latest","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"precise","Id":"8dbd9e392...",
"Created":1365714795,"Size":131502179,"VirtualSize":131502179},
{"Repository":"ubuntu","Tag":"12.10","Id":"b750fe792...",
"Created":1364102658,"Size":24653,"VirtualSize":180116135},
{"Repository":"ubuntu","Tag":"quantal","Id":"b750fe792...",
"Created":1364102658,"Size":24653,"VirtualSize":180116135}]

Ich sah keine Möglichkeit, die öffentlichen Repositorys mit diesem speziellen RESTful-Aufruf abzufragen. Die einzige andere RESTful-Methode, mit der Sie die Bilder von docker.io abfragen konnten, war die Suche. GET /images/searchDie API zeigt jedoch keine Größenattribute an , die hierfür zurückgegeben werden.

Verweise


Danke für die Einblicke! Hoffentlich wird das docker search
Dockerteam

@Sepero - ja, ich bin mir sicher, dass mit der Zeit Dinge wie diese hinzugefügt werden. Wenn dieses A Ihre Fragen gelöst hat, markieren Sie es bitte als akzeptiert, damit andere wissen, dass auch Ihr Problem gelöst wurde.
slm

Genial, genau das was ich brauchte!
Brady Dowling

7

Dies ist keine direkte Antwort auf Ihre Frage, aber ich hoffe, es wird trotzdem hilfreich sein.

Im Skript zur Datenträgerverwendung in meinen Docker-Experimenten verwende ich Folgendes:

docker run --entrypoint=/bin/sh $image -c 'du -sh / 2>/dev/null | cut -f1'

So können Sie zB laufen:

docker run --entrypoint=/bin/sh ubuntu -c 'du -sh / 2>/dev/null | cut -f1'

Oder Sie können das Skript herunterladen: Datenträgerverwendung und ausführen, um z. B. ./disk-usage "ubuntu busybox gcc"die Datenträgerverwendung (wie von gemeldet du -sh) für diese 3 Bilder anzuzeigen:

Image   Disk usage
-----   ----------
ubuntu  209M
busybox 2.6M
gcc     1.5G

Bitte beachten Sie, dass nicht der tatsächliche Download für ein bestimmtes Bild angezeigt wird und das Ergebnis nach dem Herunterladen des Bildes angezeigt wird, aber es gibt eine Vorstellung davon, wie aufgebläht ein bestimmtes Bild im Vergleich zu anderen ist.

Sie können es auf einem Computer ausführen, um zu entscheiden, ob Sie diese Bilder auf andere Computer herunterladen oder überhaupt verwenden möchten.



1

Wenn Sie sich den Docker-Code für die Pull-Operation genauer ansehen, ist Ihre Antwort sicher da. Wenn das Bild des Containers nicht zwischengespeichert ist, sammelt Docker beim Ziehen des Bildes zuerst die Informationen über das Bild aus der Registrierung, z. B. Anzahl der Ebenen, Größe der einzelnen Ebenen usw. usw.

Ich würde auf diese Datei verweisen.

https://github.com/moxiegirl/docker/blob/master/distribution/xfer/download.go


1
  1. Für ein Bild in Docker Hub:
curl -s -H "Authorization: JWT " "https://hub.docker.com/v2/repositories/library/<image-name>/tags/?page_size=100" | jq -r '.results[] | select(.name == "<tag-name>") | .images[0].size' | numfmt --to=iec-i
  1. Für Bilder in anderen Registrierungsdatenbanken wie Microsoft Container Registry. Ich finde 3 Wege heraus.

    • Verwenden Sie docker manifest inspectdiese Option , um die Manifestdaten zu beobachten, die Ihnen eine Vorstellung davon geben können, wie Sie die komprimierte Größe des Bildes erhalten.

    docker manifest inspect -v <registry-domain>/<image-name> | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | numfmt --to=iec-i
    

    Zum Aktivieren docker manifest inspectbearbeiten Sie die ~/.docker/config.jsonDatei und setzen sie experimentalauf enable. (Referenz: Docker-Manifest inspizieren )

    • Wenn Sie das Bild in Docker Hub verschieben, können Sie die komprimierte Größe des Bildes auf der Docker Hub-Website abrufen.

    • Verwenden Sie docker savediese Option, um das Bild in einer .tar-Datei zu speichern und anschließend in einer .tar.gz-Datei zu komprimieren.

docker save my-image:latest > my-image.tar

# Compress the .tar file
gzip my-image.tar

# Check the size of the compressed image
ls -lh my-image.tar.gz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.