Como determinar o tamanho da imagem do Docker antes de ser puxado?

35

Podemos procurar arquivos de imagem disponíveis no site docker, como este:

Como posso saber quais serão os tamanhos de download antes de serem puxados?

docker.io pull [image]
Sepero
fonte
1
Não é uma resposta geral, mas olhando para a maneira como as imagens do ubuntu são construídas , você pode adivinhar um limite inferior ao tamanho da imagem dos tarballs usados . (Para uso da banda previsível, você pode apenas construir as imagens a si mesmo - que seria então saber quanto é baixado, ou seja, apenas o próprio tarball.)
sr_

Respostas:

14

Observando a API do Docker, a API remota do Docker v1.10 , não parece haver nenhuma maneira de obter o tamanho das imagens. A seção "2.2 Imagens" mostra as especificações de como consultar imagens.

Exemplo

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

Mas essa consulta precisa ir contra uma instância real do Docker. Aqui está um exemplo mostrando como alguém poderia usar a consulta RESTful acima:

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

Não vi como consultar os repositórios públicos usando essa chamada RESTful específica. O único outro método RESTful que parecia que você poderia consultar as imagens do docker.io era por meio de pesquisa GET /images/search, mas a API não mostra nenhum atributo de tamanho sendo retornado para isso.

Referências

slm
fonte
Obrigado pelas ideias! Esperemos que a equipa janela de encaixe vai começar a fazer esta informação disponível viadocker search
Sepero
@ Sepero - sim, tenho certeza de que, com o tempo, coisas como essa serão adicionadas. Se este A resolver os seus Q's, marque-o como aceito para que outros saibam que o seu problema também foi resolvido.
slm
Impressionante, exatamente o que eu precisava!
Brady Dowling
7

Esta não é uma resposta direta à sua pergunta, mas espero que seja útil.

No script de uso do disco em minhas experiências com o Docker , uso algo como isto:

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

Então você pode executar, por exemplo:

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

Ou você pode fazer o download do script: uso do disco e executar, por exemplo, ./disk-usage "ubuntu busybox gcc"para exibir o uso do disco (conforme relatado por du -sh) para essas 3 imagens:

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

Observe que ele não mostra o download real necessário para uma determinada imagem e exibirá o resultado após o download da imagem, mas fornece uma idéia de quão inchada é uma determinada imagem em comparação com outras.

Você pode executá-lo em uma máquina para decidir se deseja baixar essas imagens em outras máquinas ou usá-las.

rsp
fonte
1

Se você realmente procurar no código do docker a operação pull, acho que sua resposta está lá. Se a imagem do contêiner não estiver armazenada em cache, durante a extração da imagem, a janela de encaixe coletará primeiro as informações sobre a imagem do registro, como número de camadas, tamanho de cada camada, etc.

Eu me referiria a ler este arquivo.

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

Arif A.
fonte
1
  1. Para imagem no 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 imagem em outro registro como o Microsoft Container Registry. Eu descobri 3 maneiras.

    • Use docker manifest inspectpara observar os dados do manifesto, que podem lhe dar uma idéia de como obter o tamanho compactado da imagem.

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

    Para ativar docker manifest inspect, editar o ~/.docker/config.jsonarquivo e definir experimentalcomo enable. (Referência: docker manifest inspecionar )

    • Envie a imagem para o Docker Hub e você poderá obter o tamanho compactado da imagem no site do Docker Hub.

    • Use docker savepara salvar a imagem em um arquivo .tar e, em seguida, compactá-lo em um arquivo .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
fonte