Làm thế nào để xác định kích thước hình ảnh Docker trước khi được kéo?


34

Chúng tôi có thể tìm kiếm các tập tin hình ảnh có sẵn trên trang web docker như thế này:

Làm cách nào tôi có thể biết kích thước tải xuống sẽ là gì trước khi kéo?

docker.io pull [image]

1
Không phải là một câu trả lời chung chung, nhưng nhìn vào cách xây dựng hình ảnh ub Ubuntu stackbrew , bạn có thể đoán giới hạn thấp hơn với kích thước hình ảnh từ các tarball đã sử dụng . (Để sử dụng băng thông có thể dự đoán được, bạn có thể tự mình xây dựng hình ảnh - sau đó bạn sẽ biết được tải xuống bao nhiêu, tức là chính tarball.)
sr_

Câu trả lời:


14

Nhìn vào API cho Docker, Docker Remote API v1.10 , không có cách nào để có được kích thước của hình ảnh. Mục "2.2 Hình ảnh" hiển thị thông số kỹ thuật về cách truy vấn về hình ảnh.

Thí dụ

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

Nhưng truy vấn này cần phải đi ngược lại với một ví dụ Docker thực tế. Dưới đây là một ví dụ cho thấy cách người ta có thể sử dụng truy vấn RESTful ở trên:

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

Tôi thấy không có cách nào để truy vấn các kho lưu trữ công cộng bằng cách sử dụng lệnh gọi RESTful cụ thể này. Phương thức RESTful khác trông giống như bạn có thể truy vấn hình ảnh của docker.io là thông qua tìm kiếm GET /images/search, nhưng API không hiển thị bất kỳ thuộc tính kích thước nào được trả về cho điều này.

Tài liệu tham khảo


Cảm ơn những hiểu biết! Hy vọng nhóm docker search
docker

@Sepero - vâng tôi chắc chắn theo thời gian những thứ như thế này sẽ được thêm vào. Nếu điều này A đã giải quyết Q của bạn, vui lòng đánh dấu là chấp nhận để người khác biết rằng vấn đề của bạn cũng đã được giải quyết.
slm

Tuyệt vời, chính xác những gì tôi cần!
Brady Dowling

7

Đây không phải là một câu trả lời trực tiếp cho câu hỏi của bạn nhưng tôi hy vọng nó sẽ hữu ích dù sao.

Trong tập lệnh sử dụng đĩa trong các thử nghiệm Docker của tôi, tôi sử dụng một cái gì đó như thế này:

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

Vì vậy, bạn có thể chạy, ví dụ:

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

Hoặc bạn có thể tải xuống tập lệnh đó: sử dụng đĩa và chạy, ví dụ như ./disk-usage "ubuntu busybox gcc"để sử dụng đĩa (như được báo cáo bởi du -sh) cho 3 hình ảnh đó:

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

Xin lưu ý rằng nó không hiển thị tải xuống thực tế cần thiết cho bất kỳ hình ảnh cụ thể nào và nó sẽ hiển thị kết quả sau khi tải xuống hình ảnh, nhưng nó cho một số ý tưởng về mức độ phình to của một hình ảnh nhất định so với các hình ảnh khác.

Bạn có thể chạy nó trên một máy để quyết định xem bạn muốn tải xuống hình ảnh đó trên các máy khác hay hoàn toàn sử dụng nó.



1

Nếu bạn thực sự nhìn vào mã docker cho hoạt động kéo, tôi nghĩ câu trả lời của bạn là có. Nếu hình ảnh của container không được lưu trong bộ nhớ cache, thì trong quá trình kéo hình ảnh, docker trước tiên thu thập thông tin về hình ảnh từ sổ đăng ký như số lớp, kích thước của mỗi lớp, v.v.

Tôi sẽ tham khảo để đọc tập tin này.

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


1
  1. Đối với hình ảnh trên 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. Đối với hình ảnh trên registry khác như Microsoft Container Registry. Tôi tìm ra 3 cách.

    • Sử dụng docker manifest inspectđể quan sát dữ liệu bảng kê khai, có thể cho bạn ý tưởng về cách đạt được kích thước nén của hình ảnh.

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

    Để bật docker manifest inspect, chỉnh sửa ~/.docker/config.jsontệp và đặt experimentalthành enable. (Tham khảo: kiểm tra bản kê khai docker )

    • Đẩy hình ảnh vào Docker Hub và bạn có thể lấy kích thước nén của hình ảnh trên trang web Docker Hub.

    • Sử dụng docker saveđể lưu hình ảnh vào tệp .tar và sau đó nén tệp .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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.