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]
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]
Risposte:
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.
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.
docker search
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.
Per HTTP API v2, la dimensione è disponibile tramite la risorsa tag in size
e full_size
. Ecco un URL di esempio da uno dei tag del mio repository:
https://cloud.docker.com/v2/repositories/deepdriveio/deepdrive/tags/?page_size=25&page=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
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
Per immagini su altri registri come Microsoft Container Registry. Ho capito 3 modi.
docker manifest inspect
per 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.json
file e impostarlo experimental
su 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 save
per 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