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]
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]
Câu trả lời:
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.
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.
docker search
Đâ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ó.
Đối với HTTP API v2, kích thước có sẵn thông qua tài nguyên thẻ bên dưới size
và full_size
. Đây là một URL ví dụ từ một trong các thẻ của tôi:
https://cloud.docker.com/v2/reposeocate/deepdriveio/deepdrive/tags/?page_size=25&page=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
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
Đối với hình ảnh trên registry khác như Microsoft Container Registry. Tôi tìm ra 3 cách.
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.json
tệp và đặt experimental
thà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