Come determinare la dimensione dell'immagine Docker prima di essere estratta?


35

Possiamo cercare i file di immagini disponibili sul sito Web docker in questo modo:

Come posso sapere quali saranno le dimensioni del download prima del pull?

docker.io pull [image]

1
Non è una risposta generale, ma osservando il modo in cui sono costruite le immagini ubuntu dello stackbrew , puoi indovinare un limite inferiore alla dimensione dell'immagine dai tarball usati . (Per un uso prevedibile della larghezza di banda, potresti semplicemente creare le immagini tu stesso - sapresti quindi quanto viene scaricato, cioè solo il tarball stesso.)
sr_

Risposte:


14

Guardando l'API per Docker, Docker Remote API v1.10 , non sembra che ci sia alcun modo per ottenere le dimensioni delle immagini. La sezione "2.2 Immagini" mostra le specifiche su come eseguire una query sulle immagini.

Esempio

    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
      }
    ]

Ma questa query deve andare contro un'istanza Docker effettiva. Ecco un esempio che mostra come si potrebbe usare la query RESTful sopra:

$ 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}]

Non ho visto alcun modo di interrogare i repository pubblici usando questa particolare chiamata RESTful. L'unico altro metodo RESTful che sembrava poter interrogare le immagini di docker.io era tramite la ricerca GET /images/search, ma l'API non mostra alcun attributo di dimensione restituito per questo.

Riferimenti


Grazie per gli approfondimenti! Spero che il team docker search
docker

@Sepero - sì, sono sicuro che nel tempo verranno aggiunte cose come questa. Se questo A ha risolto i tuoi Q, contrassegnalo come accettato, così gli altri sanno che anche il tuo problema è stato risolto.
slm

Fantastico, esattamente quello di cui avevo bisogno!
Brady Dowling,

7

Questa non è una risposta diretta alla tua domanda, ma spero che sarà comunque utile.

Nello script di utilizzo del disco nei miei esperimenti Docker utilizzo qualcosa del genere:

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

Quindi puoi correre, ad esempio:

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

Oppure puoi scaricare quello script: utilizzo del disco ed esegui ad es. ./disk-usage "ubuntu busybox gcc"Per visualizzare l'utilizzo del disco (come riportato da du -sh) per quelle 3 immagini:

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

Si noti che non mostra il download effettivo richiesto per una determinata immagine e mostrerà il risultato dopo aver scaricato l'immagine, ma dà un'idea di quanto sia gonfia un'immagine data rispetto ad altre.

È possibile eseguirlo su un computer per decidere se si desidera scaricare quelle immagini su altri computer o utilizzarlo affatto.



1

Se davvero guardi nel codice docker per l'operazione pull, penso che la tua risposta sia lì. Se l'immagine del contenitore non viene memorizzata nella cache, quindi durante il pull dell'immagine, la finestra mobile raccoglie prima le informazioni sull'immagine dal registro come numero di strati, dimensioni di ogni strato ecc. Ecc.

Vorrei fare riferimento per leggere questo file.

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


1
  1. Per l'immagine sull'hub Docker:
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. Per immagini su altri registri come Microsoft Container Registry. Ho capito 3 modi.

    • Utilizzare docker manifest inspectper osservare i dati manifest, che possono darti un'idea su come ottenere la dimensione compressa dell'immagine.

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

    Per abilitare docker manifest inspect, modificare il ~/.docker/config.jsonfile e impostarlo experimentalsu enable(Riferimento: docker manifest inspect )

    • Sposta l'immagine su Docker Hub e puoi ottenere le dimensioni compresse dell'immagine sul sito Web Docker Hub.

    • Utilizzare docker saveper salvare l'immagine in un file .tar e quindi comprimerlo in un file .tar.gz.

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.