Comment déterminer la taille de l'image Docker avant d'être extraite?

35

Nous pouvons rechercher les fichiers image disponibles sur le site Web de docker comme ceci:

Comment puis-je savoir quelle sera la taille du téléchargement avant d'extraire?

docker.io pull [image]
Sepero
la source
1
Pas une réponse générale, mais en regardant la façon dont les images stackbrew ubuntu sont construites , vous pouvez deviner une limite inférieure de la taille de l’ image à partir des archives tarball utilisées . (Pour une utilisation prévisible de la bande passante, vous pouvez simplement construire les images vous-même. Vous saurez alors combien de fichiers sont téléchargés, c'est-à-dire uniquement l'archive.)
sr_

Réponses:

14

En regardant l'API pour Docker, Docker Remote API v1.10 , il ne semble pas y avoir de moyen d'obtenir la taille des images. La section "2.2 Images" indique les spécifications relatives à l'interrogation des images.

Exemple

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

Mais cette requête doit s’appliquer à une instance Docker réelle. Voici un exemple montrant comment utiliser la requête RESTful ci-dessus:

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

Je n'ai vu aucun moyen d'interroger les référentiels publics à l'aide de cet appel RESTful particulier. La seule autre méthode RESTful pour laquelle vous pouviez interroger les images de docker.io était via une recherche GET /images/search, mais l'API ne montre aucun attribut de taille renvoyé pour cela.

Les références

slm
la source
Merci pour les idées! Espérons que l'équipe de dockers va commencer à rendre cette information disponible viadocker search
Sepero le
@Sepero - oui, je suis sûr qu'au fil du temps, des choses comme celle-ci seront ajoutées. Si cet A a résolu vos questions, veuillez le marquer comme accepté pour que les autres sachent que votre problème a également été résolu.
slm
Génial, exactement ce dont j'avais besoin!
Brady Dowling
7

Ce n’est pas une réponse directe à votre question, mais j’espère que cela vous sera néanmoins utile.

Dans le script d'utilisation du disque de mes expériences Docker, j'utilise quelque chose comme ceci:

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

Pour que vous puissiez courir, par exemple:

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

Ou vous pouvez télécharger ce script: utilisation du disque et le lancer, par exemple, ./disk-usage "ubuntu busybox gcc"pour du -shafficher l’utilisation du disque (comme indiqué par ) affichée pour ces 3 images:

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

Notez que le téléchargement requis pour une image donnée n'est pas affiché. Le résultat s'affiche après le téléchargement de l'image, mais il donne une idée de la densité d'une image donnée par rapport aux autres.

Vous pouvez l'exécuter sur un ordinateur pour décider si vous souhaitez télécharger ces images sur d'autres ordinateurs ou même l'utiliser.

rsp
la source
1

Si vous regardez vraiment dans le code du docker pour l'opération pull, je pense que votre réponse est là. Si l'image du conteneur n'est pas mise en cache, lors du tirage de l'image, docker commence par collecter les informations relatives à l'image du registre, telles que le nombre de couches, la taille de chaque couche, etc.

Je vous renvoie à lire ce fichier.

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

Arif A.
la source
1
  1. Pour l'image sur 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. Pour l'image sur un autre registre tel que Microsoft Container Registry. Je découvre 3 façons.

    • Utilisez-le docker manifest inspectpour observer les données du manifeste, ce qui peut vous donner une idée de la façon de gagner la taille compressée de l'image.

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

    Pour activer docker manifest inspect, modifiez le ~/.docker/config.jsonfichier et définissez-le experimentalsur enable. (Référence: inspection du manifeste de menu fixe )

    • Poussez l'image vers Docker Hub et vous pouvez obtenir la taille compressée de l'image sur le site Web de Docker Hub.

    • Utilisez cette option docker savepour enregistrer une image dans un fichier .tar, puis le compresser en un fichier .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
Di Lin
la source