Bagaimana cara menentukan ukuran gambar Docker sebelum ditarik?

35

Kami dapat mencari file gambar yang tersedia di situs web buruh pelabuhan seperti ini:

Bagaimana cara mengetahui ukuran unduhan sebelum menarik?

docker.io pull [image]
Sepero
sumber
1
Bukan jawaban umum, tetapi melihat bagaimana gambar ubuntu stackbrew dibangun , Anda bisa menebak batas bawah untuk ukuran gambar dari tarball yang digunakan . (Untuk penggunaan bandwidth yang dapat diprediksi, Anda mungkin hanya membuat gambar sendiri - Anda kemudian akan tahu berapa banyak yang diunduh, yaitu hanya tarball itu sendiri.)
sr_

Jawaban:

14

Melihat API untuk Docker, Docker Remote API v1.10 , tampaknya tidak ada cara untuk mendapatkan ukuran gambar. Bagian "2.2 Gambar" menunjukkan spesifikasi untuk cara menanyakan tentang gambar.

Contoh

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

Tapi kueri ini harus bertentangan dengan instance Docker yang sebenarnya. Berikut ini contoh yang menunjukkan bagaimana seseorang dapat menggunakan kueri RESTful di atas:

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

Saya tidak melihat cara untuk menanyakan repositori publik menggunakan panggilan tenang ini. Satu-satunya metode RESTful lain yang tampak seperti Anda dapat meminta gambar docker.io adalah melalui pencarian GET /images/search, tetapi API tidak menunjukkan atribut ukuran yang dikembalikan untuk ini.

Referensi

slm
sumber
Terima kasih atas wawasannya! Semoga tim buruh pelabuhan akan mulai membuat info ini tersedia melaluidocker search
Sepero
@ Solero - ya saya yakin dari waktu ke waktu hal-hal seperti ini akan ditambahkan. Jika A ini telah menyelesaikan Q Anda, silakan tandai sebagai diterima sehingga orang lain tahu masalah Anda telah diselesaikan juga.
slm
Luar biasa, persis apa yang saya butuhkan!
Brady Dowling
7

Ini bukan jawaban langsung untuk pertanyaan Anda, tetapi saya harap ini akan membantu.

Dalam skrip penggunaan disk dalam percobaan Docker saya, saya menggunakan sesuatu seperti ini:

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

Jadi Anda bisa berlari, misalnya:

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

Atau Anda dapat mengunduh skrip itu: penggunaan disk dan menjalankan mis. ./disk-usage "ubuntu busybox gcc"Agar penggunaan disk (sebagaimana dilaporkan oleh du -sh) ditampilkan untuk 3 gambar tersebut:

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

Harap perhatikan bahwa itu tidak menunjukkan unduhan aktual yang diperlukan untuk gambar apa pun, dan itu akan menampilkan hasilnya setelah mengunduh gambar, tetapi ini memberikan beberapa gagasan tentang bagaimana kembung adalah gambar yang diberikan dibandingkan dengan yang lain.

Anda dapat menjalankannya di satu mesin untuk memutuskan apakah Anda ingin mengunduh gambar itu di komputer lain, atau menggunakannya sama sekali.

rsp
sumber
1

Jika Anda benar-benar melihat ke kode buruh pelabuhan untuk operasi tarik, saya pikir jawaban Anda ada di sana. Jika gambar wadah tidak di-cache, maka saat menarik gambar, buruh pelabuhan pertama mengumpulkan informasi tentang gambar dari registri seperti jumlah lapisan, ukuran setiap lapisan dll. Dll.

Saya akan merujuk untuk membaca file ini.

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

Arif A.
sumber
1
  1. Untuk gambar di 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. Untuk gambar di registri lain seperti Microsoft Container Registry. Saya mencari tahu 3 cara.

    • Gunakan docker manifest inspectuntuk mengamati data manifes, yang dapat memberi Anda gagasan tentang cara mendapatkan ukuran terkompresi dari gambar.

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

    Untuk mengaktifkan docker manifest inspect, edit ~/.docker/config.jsonfile dan atur experimentalke enable. (Referensi: docker manifest inspect )

    • Dorong gambar ke Docker Hub dan Anda bisa mendapatkan ukuran gambar yang dikompres di situs Docker Hub.

    • Gunakan docker saveuntuk menyimpan gambar ke file .tar dan kemudian kompres menjadi 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
Di Lin
sumber