Docker의 Pull Digest 및 Image ID
기왕 네가 이 글을 보았으니, 너는 틀림없이 이미 Docker를 사용했을 뿐만 아니라, Pull도 거울을 보았을 것이다. 그러므로 아래의 명령은 틀림없이 낯설지 않을 것이다
# docker pull registry.aliyuncs.com/jiangjizhong/busybox:latest
latest: Pulling from jiangjizhong/busybox
8ddc19f16526: Pull complete
Digest: sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6
Status: Downloaded newer image for registry.aliyuncs.com/jiangjizhong/busybox:latest
출력 내용에 있는 Digest를 주의해 본 적이 있습니까? 무슨 뜻인지 아십니까?
docker 이미지 명령도 썼을 텐데,
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.aliyuncs.com/jiangjizhong/busybox latest 2b8fd9751c4c 3 weeks ago 1.093 MB
출력에 있는 IMAGE ID가 무슨 뜻인지 말씀해 주시겠어요?
만약 네가 이미 상기 두 문제의 답안을 알고 있다면, 지금은 브라우저를 꺼도 된다. 이 글의 내용은 너에게 너무 간단명료하다.만약 네가 대답하지 못한다면, 괜찮아, 계속 보아라, 곧 너는 이 문제들을 분명히 할 것이다.
Docker1.10 및 Registry 2.3은 미러링과 Manifest 형식에 큰 변화가 있으므로 다음 내용은 모두 Docker1을 기반으로 합니다.10+ 및 Registry 2.3+옛날 버전에 연연하지 말고 바람에 날려버려라.
Docker 미러의 구성
Docker 미러에는 두 가지 컨테이너 세트(Layer)와 해당 컨테이너를 만들 때 사용할 매개변수 세트가 있습니다.우리는 각각
docker history
와 docker inspect
두 명령을 통해 층과 거울 파라미터를 볼 수 있다.# docker history registry.aliyuncs.com/jiangjizhong/busybox
IMAGE CREATED CREATED BY SIZE COMMENT
2b8fd9751c4c 3 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0 B
3 weeks ago /bin/sh -c #(nop) ADD file:9ca60502d646bdd815 1.093 MB
하나의 용기를 시작하면, 우리는 용기 안에 완전한 파일 시스템이 있고, 용기 안의 모든 파일은 거울을 구성하는 층에서 나온다는 것을 볼 수 있다.
[그림 업로드 실패...(image-9f4b5d-1521381494628)]
각 층에 저장된 것은 이전 층의 파일에 대한 변경이다. 예를 들어 몇 개의 파일을 추가했고 몇 개의 파일을 수정했으며 몇 개의 파일을 삭제했다.Docker는aufs와 같은 기술을 통해 모든 층을 같은 디렉터리에 마운트하여 용기에서 볼 수 있는 완전한 디렉터리 구조를 형성했다.
층 안의 모든 파일을 tar로 포장해서 sha256sum를 계산하면 층 id (LayerId) 를 얻을 수 있습니다.
Docker1.10부터 Layer에는 파일 변경 내용만 포함되고 구성 정보는 더 이상 포함되지 않으며 모든 구성 정보는 미러에 속합니다.
ImageID 및 Digest
Pull은 두 단계로 나뉘는데, 첫 번째 단계는 Manifest를 다운로드하는 것이다.Manifest에는 앞서 설명한 구성 파일과 레이어 목록이 포함되어 있습니다.우리는 이 과정을 모의해서busybox의 Manifest 파일을 다운로드해 볼 수 있다.
#!/bin/env python
from __future__ import print_function
import requests
import json
auth = requests.get('https://dockerauth.aliyuncs.com/auth?scope=repository%3Ajiangjizhong%2Fbusybox%3Apull&service=registry.aliyuncs.com')
token = json.loads(auth.text)['token']
headers = {
'Authorization': 'Bearer %s' % (token),
'Accept': 'application/vnd.docker.distribution.manifest.list.v2+json',
'Accept': 'application/vnd.docker.distribution.manifest.v1+prettyjws',
'Accept': 'application/json',
'Accept': 'application/vnd.docker.distribution.manifest.v2+json'
}
manifest = requests.get('https://registry.aliyuncs.com/v2/jiangjizhong/busybox/manifests/latest', headers=headers)
print('Docker Content Digest: %s' % manifest.headers['docker-content-digest'])
print(manifest.text, end='')
위의 코드를
manifest.py
로 저장하고 실행python manifest.py
하면 출력은 다음과 같다.Docker Content Digest: sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6
{
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"digest": "sha256:8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f",
"size": 667590
}
],
"schemaVersion": 2,
"config": {
"mediaType": "application/octet-stream",
"digest": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749",
"size": 1459
},
"mediaType": "application/vnd.docker.distribution.manifest.v2+json"
}
내가 특별히 출력한 응답 헤드
docker-content-digest
의 값은 sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6
인데 낯이 익지 않습니까?맞아요!이 문서의 처음 Docker Pull 출력에서 Digest가 바로 이 값입니다.이 값은 실제로manifest 내용의 sha256sum입니다.Manifest 내용의 config 부분을 살펴보면digest를 찾을 수 있습니다. 이 값은 docker images
출력된 이미지 ID입니다. 이미지 ID는 이미지 프로필의sha256sum입니다. Registry에서 이미지 프로필을 계속 다운로드할 수 있습니다.텍스트:https://m.aliyun.com/yunqi/articles/57752
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.