Możemy wyszukać dostępne pliki obrazów w witrynie dokera w następujący sposób:
Jak mogę określić rozmiar (rozmiary) pobierania przed pobraniem?
docker.io pull [image]
Możemy wyszukać dostępne pliki obrazów w witrynie dokera w następujący sposób:
Jak mogę określić rozmiar (rozmiary) pobierania przed pobraniem?
docker.io pull [image]
Odpowiedzi:
Patrząc na API dla Docker, Docker Remote API v1.10 , nie wydaje się, że jest jakiś sposób na uzyskanie rozmiarów obrazów. Sekcja „2.2 Obrazy” pokazuje specyfikację dotyczącą zapytań o obrazy.
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
}
]
Ale to zapytanie musi być zgodne z rzeczywistą instancją Dockera. Oto przykład pokazujący, jak można użyć powyższego zapytania 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}]
Nie widziałem sposobu na zapytanie publicznych repozytoriów przy użyciu tego konkretnego wywołania RESTful. Jedyną inną metodą RESTful, która wyglądała, jakbyś mógł zapytać o obrazy docker.io, była wyszukiwarka GET /images/search
, ale API nie pokazuje żadnych zwracanych atrybutów rozmiaru.
docker search
To nie jest bezpośrednia odpowiedź na twoje pytanie, ale mam nadzieję, że mimo wszystko będzie pomocna.
W skrypcie użycia dysku w moich eksperymentach Dockera używam czegoś takiego:
docker run --entrypoint=/bin/sh $image -c 'du -sh / 2>/dev/null | cut -f1'
Możesz więc uruchomić np .:
docker run --entrypoint=/bin/sh ubuntu -c 'du -sh / 2>/dev/null | cut -f1'
Możesz też pobrać ten skrypt: użycie dysku
i uruchomić np. ./disk-usage "ubuntu busybox gcc"
Aby wyświetlić użycie dysku (zgodnie z raportem du -sh
) dla tych 3 obrazów:
Image Disk usage
----- ----------
ubuntu 209M
busybox 2.6M
gcc 1.5G
Pamiętaj, że nie pokazuje rzeczywistego pobierania wymaganego dla danego obrazu i wyświetli wynik po pobraniu obrazu, ale daje pewne wyobrażenie o tym, jak rozdęty jest dany obraz w porównaniu do innych.
Możesz uruchomić go na jednym komputerze, aby zdecydować, czy chcesz pobrać te obrazy na inne komputery, czy w ogóle go użyć.
W przypadku interfejsu API HTTP v2 rozmiar jest dostępny za pośrednictwem zasobu znaczników w obszarze size
i full_size
. Oto przykładowy adres URL z jednego z tagów mojego repo:
https://cloud.docker.com/v2/repositories/deepdriveio/deepdrive/tags/?page_size=25&page=1
Jeśli naprawdę przyjrzysz się kodowi dokowanemu dla operacji ściągania, myślę, że twoja odpowiedź tam jest. Jeśli obraz kontenera nie jest buforowany, to podczas pobierania obrazu dokerka najpierw zbiera informacje o obrazie z rejestru, takie jak liczba warstw, rozmiar każdej warstwy itp.
Odsyłam do przeczytania tego pliku.
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
Obraz w innym rejestrze, takim jak Microsoft Container Registry. Wymyślam 3 sposoby.
docker manifest inspect
aby obserwować dane manifestu, które mogą dać ci wyobrażenie o tym, jak uzyskać skompresowany rozmiar obrazu.docker manifest inspect -v <registry-domain>/<image-name> | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | numfmt --to=iec-i
Aby włączyć docker manifest inspect
, edytuj ~/.docker/config.json
plik i ustaw experimental
na enable
. (Odwołanie: manifest manifestu dokera )
Wepchnij obraz do Docker Hub, a możesz uzyskać skompresowany rozmiar obrazu na stronie Docker Hub.
Użyj, docker save
aby zapisać obraz do pliku .tar, a następnie skompresuj go do pliku .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