วิธีการกำหนดขนาดของภาพ Docker ก่อนที่จะถูกดึง?


34

เราสามารถค้นหาไฟล์รูปภาพที่มีในเว็บไซต์ docker เช่นนี้:

ฉันจะบอกได้อย่างไรว่าขนาดการดาวน์โหลดจะเป็นอย่างไรก่อนที่จะทำการดึง

docker.io pull [image]

1
ไม่ได้คำตอบทั่วไป แต่มองไปที่วิธีการที่ภาพอูบุนตู stackbrew ถูกสร้างขึ้นคุณสามารถคาดเดาที่ถูกผูกไว้ที่ต่ำกว่าขนาดของภาพจากtarballs สินค้า (สำหรับการใช้แบนด์วิดธ์ที่คาดเดาได้คุณอาจสร้างภาพด้วยตัวเอง - จากนั้นคุณจะรู้ว่ามีการดาวน์โหลดมากแค่ไหนนั่นก็คือ tarball นั่นเอง)
sr_

คำตอบ:


14

ดู API สำหรับ Docker, Docker Remote API v1.10 , มันไม่ปรากฏว่ามีวิธีใดที่จะได้ขนาดของภาพ ส่วน "2.2 อิมเมจ" แสดงข้อกำหนดสำหรับวิธีเคียวรีเกี่ยวกับรูปภาพ

ตัวอย่าง

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

แต่เคียวรีนี้ต้องเปรียบเทียบกับอินสแตนซ์ของนักเทียบท่าจริง นี่คือตัวอย่างที่แสดงวิธีการใช้แบบสอบถาม RESTful ด้านบน:

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

ฉันไม่เห็นวิธีการสอบถามที่เก็บข้อมูลสาธารณะโดยใช้การเรียก RESTful นี้ วิธี RESTful อื่น ๆ เท่านั้นที่ดูเหมือนว่าคุณสามารถสืบค้นรูปภาพของ docker.io ได้จากการค้นหาGET /images/searchแต่ API ไม่แสดงแอตทริบิวต์ขนาดใด ๆ ที่ส่งคืนสำหรับสิ่งนี้

อ้างอิง


ขอบคุณสำหรับข้อมูลเชิงลึก! หวังว่าทีมนักเทียบท่าจะเริ่มdocker search
เปิดเผย

@Sepero - ใช่ฉันแน่ใจว่าเมื่อเวลาผ่านไปสิ่งต่าง ๆ เช่นนี้จะได้รับการเพิ่ม หาก A นี้ได้รับการแก้ไข Q ของคุณโปรดทำเครื่องหมายว่ายอมรับเพื่อให้คนอื่นรู้ว่าปัญหาของคุณได้รับการแก้ไขแล้วเช่นกัน
slm

ยอดเยี่ยมสิ่งที่ฉันต้องการ!
เบรดี้ดาวลิ่ง

7

นี่ไม่ใช่คำตอบที่ตรงกับคำถามของคุณ แต่ฉันหวังว่ามันจะเป็นประโยชน์

ในสคริปต์การใช้งานดิสก์ ในการทดลอง Dockerของ ฉันฉันใช้สิ่งนี้:

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

ดังนั้นคุณสามารถเรียกใช้เช่น:

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

หรือคุณสามารถดาวน์โหลดสคริปต์นั้น: การใช้งานดิสก์ และเรียกใช้เช่น./disk-usage "ubuntu busybox gcc"เพื่อให้มีการใช้งานดิสก์ (ตามที่รายงานโดยdu -sh) แสดงสำหรับ 3 ภาพเหล่านั้น:

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

โปรดทราบว่ามันไม่แสดงการดาวน์โหลดจริงที่จำเป็นสำหรับรูปภาพใด ๆ และมันจะแสดงผลหลังจากดาวน์โหลดภาพ แต่มันให้ความคิดว่าภาพที่ได้รับการป่องเมื่อเทียบกับภาพอื่น ๆ

คุณสามารถเรียกใช้บนเครื่องหนึ่งเพื่อตัดสินใจว่าคุณต้องการดาวน์โหลดภาพนั้นบนเครื่องอื่นหรือใช้งานได้เลย



1

หากคุณดูที่รหัสนักเทียบท่าสำหรับการทำงานแบบดึงฉันคิดว่าคำตอบของคุณอยู่ที่นั่น หากรูปภาพของคอนเทนเนอร์ไม่ถูกแคชดังนั้นในระหว่างการดึงรูปภาพนักเทียบท่าจะรวบรวมข้อมูลเกี่ยวกับรูปภาพจากรีจิสทรีเช่นจำนวนชั้นขนาดของแต่ละชั้นเป็นต้น

ฉันจะอ่านไฟล์นี้

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


1
  1. สำหรับภาพบน 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. สำหรับรูปภาพในรีจิสตรีอื่น ๆ เช่น Microsoft Container Registry ฉันคิดออก 3 วิธี

    • ใช้docker manifest inspectเพื่อสังเกตข้อมูลรายการซึ่งจะทำให้คุณมีความคิดเกี่ยวกับวิธีการเพิ่มขนาดที่บีบอัดของภาพ

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

    หากต้องการเปิดใช้งานให้docker manifest inspectแก้ไข~/.docker/config.jsonไฟล์และตั้งค่าexperimentalเป็นenable(การอ้างอิง: รายการตรวจสอบ Docker manifest )

    • ดันรูปภาพไปที่ Docker Hub และคุณสามารถรับขนาดที่บีบอัดของรูปภาพได้บนเว็บไซต์ Docker Hub

    • ใช้docker saveเพื่อบันทึกภาพเป็นไฟล์. tar แล้วบีบอัดไฟล์. 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.