Docker Hub 에서 Docker 이미지를 수동으로 다운로드하고 싶습니다 . 보다 구체적으로, Docker 클라이언트 소프트웨어가 설치되어 있지 않은 제한된 환경의 시스템에있는 Docker Hub에서 Docker 이미지를 다운로드하려고합니다. 공식 API를 사용하면 이것이 가능할 것이라고 생각 했지만, 그렇지 않은 것 같습니다. 다음 토론을 참조하십시오.
API가 이미지 다운로드를 지원하지 않는 경우가 실제로 있습니까? 이 문제를 해결하는 방법이 있습니까?
업데이트 1 :
다음 ServerFault 게시물을 보았습니다.
허용 솔루션은 용도 docker save
내 상황에 도움이되지 않는 명령을. 그러나 거기에 게시 된 다른 솔루션은 다음 StackOverflow 게시물을 인용합니다.
해결책 중 하나 는 이미지 다운로드를위한 명령을 생성 할 수있는 docker-registry-debug 라는 명령 줄 도구를 나타냅니다 curl
. 내가 가진 것은 다음과 같습니다.
user@host:~$ docker-registry-debug curlme docker ubuntu
# Reading user/passwd from env var "USER_CREDS"
# No password provided, disabling auth
# Getting token from https://index.docker.io
# Got registry endpoint from the server: https://registry-1.docker.io
# Got token: signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read
curl -i --location-trusted -I -X GET -H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer
user@host:~$ curl \
-i --location-trusted -I -X GET \
-H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read"
https://registry-1.docker.io/v1/images/ubuntu/layer
HTTP/1.1 404 NOT FOUND
Server: gunicorn/18.0
Date: Wed, 29 Nov 2017 01:00:00 GMT
Expires: -1
Content-Type: application/json
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 29
X-Docker-Registry-Version: 0.8.15
X-Docker-Registry-Config: common
Strict-Transport-Security: max-age=31536000
불행히도 curl
생성 된 명령이 작동하지 않는 것처럼 보입니다 .
업데이트 2 :
Docker Hub에서 레이어 블롭을 다운로드 할 수있는 것 같습니다. 다음은 현재 진행중인 방법입니다.
인증 토큰을 받으십시오.
user@host:~$ export TOKEN=\
"$(curl \
--silent \
--header 'GET' \
"https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" \
| jq -r '.token' \
)"
이미지 매니페스트를 가져옵니다.
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq '.'
이미지 매니페스트를 가져와 BLOB 합계를 추출하십시오.
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum'
sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
sha256:be588e74bd348ce48bb7161350f4b9d783c331f37a853a80b0b4abc0a33c569e
sha256:e4ce6c3651b3a090bb43688f512f687ea6e3e533132bcbc4a83fb97e7046cea3
sha256:421e436b5f80d876128b74139531693be9b4e59e4f1081c9a3c379c95094e375
sha256:4c7380416e7816a5ab1f840482c9c3ca8de58c6f3ee7f95e55ad299abbfe599f
sha256:660c48dd555dcbfdfe19c80a30f557ac57a15f595250e67bfad1e5663c1725bb
단일 레이어 Blob을 다운로드하여 파일에 씁니다.
user@host:~$ BLOBSUM=\
"sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
user@host:~$ curl \
--silent \
--location \
--request GET \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"
모든 BLOB 합계를 파일에 씁니다.
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum' > ubuntu-blobsums.txt
매니페스트에서 모든 레이어 블로 브를 다운로드하십시오.
user@host:~$ while read BLOBSUM; do
curl \
--silent \
--location \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"; \
done < blobsums.txt
이제 레이어 블롭이 많이 있으며 이미지로 다시 결합해야합니다.
관련된 링크들: