Çekilmeden önce Docker görüntü boyutu nasıl belirlenir?


34

Docker web sitesinde mevcut resim dosyalarını şu şekilde arayabiliriz:

İndirme boyutlarının çekilmeden önce ne olacağını nasıl söyleyebilirim?

docker.io pull [image]

1
Değil genel cevap, ama stackbrew ubuntu görüntüleri yapılış şekilleri bakarak , içinden görüntü boyutuna bağlı bir alt tahmin edebilirsiniz kullanılan tar toplarından . (Tahmin edilebilir bant genişliği kullanımı için, görüntüleri kendiniz oluşturabilirsiniz - ne kadar indirileceğini, yani sadece tarball'ın kendisini
bilirsiniz

Yanıtlar:


14

Docker API'sine, Docker Remote API v1.10'a bakıldığında, görüntülerin boyutlarını almanın hiçbir yolu görünmüyor. "2.2 Görüntüler" bölümü resimlerle ilgili sorgulamanın özelliklerini gösterir.

Örnek

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

Ancak bu sorgunun gerçek bir Docker örneğine karşı gitmesi gerekiyor. İşte yukarıdaki RESTful sorgusunun nasıl kullanılabileceğini gösteren bir örnek:

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

Bu belirli RESTful çağrısını kullanarak halka açık depoları sorgulamanın bir yolunu görmedim. Docker.io'nun resimlerini sorgulayabileceğiniz gibi görünen tek RESTful yöntemi yalnızca arama yoluyla oldu GET /images/search, ancak API bunun için döndürülen herhangi bir boyut özelliğini göstermiyor.

Referanslar


Görüşleriniz için teşekkürler! Umarım liman işçisi ekibi bu bilgiyi şu ana kadar kullanmaya başlayacaktırdocker search
Sepero

@Sepero - evet Bu gibi şeyler eklenecek zaman içinde eminim. Eğer bu A, Q'nuzu çözdüyse, lütfen kabul edilir olarak işaretleyin, böylece başkalarının da sorununun çözüldüğünü anlayın.
slm

Müthiş, tam ihtiyacım olan şey!
Brady Dowling,

7

Bu, sorunuza doğrudan bir cevap değil ama yine de faydalı olacağını umuyorum.

In disk kullanım senaryo benim de Docker deneyler böyle bir şey kullanın:

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

Böylece koşabilirsiniz, örneğin:

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

Veya bu betiği indirebilirsiniz: disk kullanımı ve örneğin bu 3 resim için ./disk-usage "ubuntu busybox gcc"disk kullanımının (bildirildiği gibi du -sh) gösterilmesi için:

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

Lütfen herhangi bir görüntü için gerekli olan gerçek indirmeyi göstermediğini ve görüntüyü indirdikten sonra sonucu göstereceğini, ancak diğerlerine kıyasla belirli bir görüntünün ne kadar şişirilmiş olduğuna dair bir fikir verdiğini unutmayın.

Bu görüntüleri diğer makinelere indirmek mi yoksa hiç kullanmak mı istediğinize karar vermek için bir makinede çalıştırabilirsiniz.



1

Çekme işlemi için docker koduna gerçekten bakarsanız, cevabınızın orada olduğunu düşünüyorum. Kabın görüntüsü önbelleğe alınmamışsa, görüntünün çekilmesi sırasında, liman işçisi ilk önce görüntüyle ilgili bilgileri katman sayısı, her katmanın boyutu vb. Gibi kayıt defterinden toplar.

Bu dosyayı okumak için başvuruda bulunabilirim.

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


1
  1. Docker Hub'daki görüntü için:
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. Microsoft Container Registry gibi diğer kayıtlardaki görüntü için. 3 yol buldum.

    • Görüntünün docker manifest inspectsıkıştırılmış boyutunun nasıl elde edileceği hakkında fikir verebilecek açık verileri gözlemlemek için kullanın .

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

    Etkinleştirmek için docker manifest inspect, düzenleme ~/.docker/config.jsondosyası ve set experimentaliçinenable (Referans:. Liman işçisi incelemek manifestosunda )

    • Görüntüyü Docker Hub'a itin ve görüntünün sıkıştırılmış boyutunu Docker Hub web sitesinde bulabilirsiniz.

    • Kullanım docker savebir .tar dosyaya kaydetmek ve sonra bir Tar.gz dosyayı sıkıştırmak için.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.