¿Cómo determinar el tamaño de la imagen de Docker antes de ser extraído?

35

Podemos buscar archivos de imagen disponibles en el sitio web de Docker como este:

¿Cómo puedo saber cuáles serán los tamaños de descarga antes de extraer?

docker.io pull [image]
Sepero
fuente
1
No es una respuesta general, pero al observar la forma en que se construyen las imágenes de stackbrew ubuntu , puede adivinar un límite inferior al tamaño de la imagen de los tarballs utilizados . (Para el uso de ancho de banda predecible, que sólo podría construir las imágenes sí mismo - que luego sabría cuánto se descarga, es decir, sólo el archivo comprimido en sí.)
SR_

Respuestas:

14

Mirando la API de Docker, Docker Remote API v1.10 , no parece que haya ninguna forma de obtener el tamaño de las imágenes. La sección "2.2 Imágenes" muestra la especificación de cómo consultar sobre imágenes.

Ejemplo

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

Pero esta consulta debe ir en contra de una instancia real de Docker. Aquí hay un ejemplo que muestra cómo se podría usar la consulta RESTful anterior:

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

No vi ninguna forma de consultar los repositorios públicos utilizando esta llamada RESTful particular. El único otro método RESTful que parecía que podía consultar las imágenes de docker.io fue a través de la búsqueda GET /images/search, pero la API no muestra ningún atributo de tamaño que se devuelva para esto.

Referencias

slm
fuente
Gracias por las ideas! Con suerte el equipo estibador comenzará a hacer esta información disponible a través dedocker search
Sepero
@Sepero: sí, estoy seguro de que con el tiempo se agregarán cosas como esta. Si esta A ha resuelto sus Q, márquelas como aceptadas para que otros sepan que sus problemas también se han resuelto.
slm
Impresionante, exactamente lo que necesitaba!
Brady Dowling
7

Esta no es una respuesta directa a su pregunta, pero espero que sea útil de todos modos.

En el script de uso del disco en mis experimentos de Docker , uso algo como esto:

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

Para que pueda ejecutar, por ejemplo:

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

O puede descargar ese script: uso del disco y ejecutar, por ejemplo, ./disk-usage "ubuntu busybox gcc"para que se du -shmuestre el uso del disco (según lo informado por ) para esas 3 imágenes:

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

Tenga en cuenta que no muestra la descarga real requerida para una imagen determinada, y mostrará el resultado después de descargar la imagen, pero da una idea de cuán hinchada es una imagen determinada en comparación con otras.

Puede ejecutarlo en una máquina para decidir si desea descargar esas imágenes en otras máquinas o usarlo en absoluto.

rsp
fuente
1

Si lo miras en el código de cargador de muelle para la operación de extracción, creo que su respuesta es no. Si la imagen del recipiente no se almacena en caché, a continuación, durante la extracción de la imagen, cargador de muelle primero recoge la información sobre la imagen del registro como el número de capas, el tamaño de cada uno de capas, etc., etc.

Me referiría a leer este archivo.

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

Arif A.
fuente
1
  1. Para la imagen en 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. Para imagen en otro registro como Microsoft Container Registry. Me imagino 3 formas.

    • Uso docker manifest inspectde observar los datos del manifiesto, que le puede dar idea sobre cómo obtener el tamaño de la imagen comprimida.

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

    Para habilitar docker manifest inspect, edite el ~/.docker/config.jsonarchivo y configúrelo experimentalen enable. (Referencia: docker manifest inspect )

    • Empuje la imagen a Docker Hub y podrá obtener el tamaño comprimido de la imagen en el sitio web de Docker Hub.

    • Use docker savepara guardar la imagen en un archivo .tar y luego comprimirlo en un archivo .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
fuente