Docker의 Pull Digest 및 Image ID

4594 단어
텍스트:https://m.aliyun.com/yunqi/articles/57752
기왕 네가 이 글을 보았으니, 너는 틀림없이 이미 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 historydocker 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

좋은 웹페이지 즐겨찾기