당기기 전에 Docker 이미지 크기를 결정하는 방법은 무엇입니까?


33

docker 웹 사이트에서 다음과 같이 사용 가능한 이미지 파일을 검색 할 수 있습니다.

가져 오기 전에 다운로드 크기를 어떻게 알 수 있습니까?

docker.io pull [image]

1
아니 일반적인 대답은하지만, stackbrew 우분투 이미지를 구축하는 방법을보고 , 당신의 이미지 크기에 하한을 추측 할 수 사용 된 타르볼 . (예측 가능한 대역폭 사용을 위해 이미지를 직접 만들면 타르볼 자체 만 다운로드 할 수 있습니다.)
sr_

답변:


14

Docker 용 API 인 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
      }
    ]

그러나이 쿼리는 실제 Docker 인스턴스에 대해 진행되어야합니다. 위의 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 호출을 사용하여 퍼블릭 리포지토리를 쿼리하는 방법을 보지 못했습니다. docker.io의 이미지를 쿼리 할 수있는 것처럼 보이는 유일한 RESTful 메소드는 search을 통한 GET /images/search것이지만 API는이에 대해 반환되는 크기 속성을 표시하지 않습니다.

참고 문헌


통찰력에 감사드립니다! 도커 팀이 다음 정보를 통해이 정보를 사용할 수 있기를 바랍니다.docker search
Sepero

@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 및 예 ./disk-usage "ubuntu busybox gcc"를 들어 디스크 사용량 (에 의해보고 됨 du -sh)을 표시하여 3 개의 이미지를 표시 할 수 있습니다.

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

특정 이미지에 필요한 실제 다운로드는 표시되지 않으며 이미지를 다운로드 한 후 결과가 표시되지만 다른 이미지와 비교하여 특정 이미지가 어떻게 부풀려 졌는지에 대한 아이디어를 제공합니다.

한 시스템에서이 이미지를 실행하여 다른 시스템에서 해당 이미지를 다운로드 할 것인지 아니면 전혀 사용할 것인지 결정할 수 있습니다.




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 inspect )

    • 이미지를 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.