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]
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]
Jawaban:
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.
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.
docker search
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.
Untuk HTTP API v2, ukuran tersedia melalui sumber tag di bawah size
dan full_size
. Berikut ini contoh URL dari salah satu tag repo saya:
https://cloud.docker.com/v2/repositories/deepdriveio/deepdrive/tags/?page_size=25&page=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
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
Untuk gambar di registri lain seperti Microsoft Container Registry. Saya mencari tahu 3 cara.
docker manifest inspect
untuk 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.json
file dan atur experimental
ke enable
. (Referensi: docker manifest inspect )
Dorong gambar ke Docker Hub dan Anda bisa mendapatkan ukuran gambar yang dikompres di situs Docker Hub.
Gunakan docker save
untuk 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