Digest 는 무엇인가?
Docker image 는 S3 파일처럼 MD5 해시값을 적용한 digest 를 갖는다.
Digest 의 사전적 정의는 단방향 해시 함수에 적용하여 일정한 길이로 생성된 결과 값이다.
Digest 는 왜 쓰는가?
메시지 무결성 보장
-> 메시지가 변경되었는지 여부를 확인하기 위한 용도로 쓰인다.
Digest 활용 예시
- git commit
각각의 commit 은 서로 다른 digest 값을 갖는다. - S3 eTag
S3 파일 (Object) 또한 MD5 해싱을 통해 생성된 digest 값을 `eTag` 속성으로 갖는다. - Docker image digest
Docker image 파일도 SHA-256 으로 digest 값을 갖는다.
index digest vs manifest digest
Docker Hub 이미지를 보다보면 index-digest , manifest digest 두종류의 digest 값을 확인할 수 있다.
무슨 차이일까?
manifest digest
manifest 파일에 대한 digest 값이다.
즉, Docker 실제 image 와는 별개이다.
manifest 파일은 다음과 같은 정보를 담는다.
- Layer
- Configuration
- Metadata (tag, labels..)
manifest.json 예시파일)
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 7023,
"digest": "sha256:c72eaefa7f6547a472c1651e1921f8d91a2ac6d1ef4a7e75c3dbefceba36e691"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 32654,
"digest": "sha256:8c662931926fae2e35a7a203a123baa6959a93b2d563ff37a1b6c5f2b40a9b9b"
},
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 16724,
"digest": "sha256:b1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
}
]
}
index digest (manifest list digest)
multi-architecture image digest.
Docker 에서 image:tag 만 지정하면 알아서 실행 플랫폼 (OS)별로 매핑된 image 를 pull 해온다.
$ docker pull <image:tag>
index digest 는 사실상 플랫폼별로 어느 image digest 를 긁어올지 결정하기 위해 만들어진 digest pointer 라고 보면 된다.
manifest list 파일은 다음과 같은 정보를 담는다.
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1579,
"digest": "sha256:8c662931926fae2e35a7a203a123baa6959a93b2d563ff37a1b6c5f2b40a9b9b",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1600,
"digest": "sha256:b1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"platform": {
"architecture": "arm64",
"os": "linux"
}
}
]
}
OS/Architecture 별 image digest 를 갖는다.
# eclipse-temurin 이미지에서 index digest 에 따라
# pull 받는 OS platform 에 매핑된 이미지의 digest 를 pull 해온다.
$ docker pull eclipse-temurinn@sha256:8e401a94f5aef1b6a3765e30e5020d29d68d29f084c2f152b1129f34d1c6e015
위 명령어를 해석하면
" `eclipse-temurin` 이미지의 multiplatform image manifest 의 digest 인
8e401a94f5aef1b6a3765e30e5020d29d68d29f084c2f152b1129f34d1c6e015` 를 참조하여 내 OS / architecture 에 맞는 image 를 pull 해온다."
이다.
결론
실무에서 Docker image 를 pull 해올 땐 index digest 를 참조하면 된다.
'기타 > Docker' 카테고리의 다른 글
[Docker] Multi Stage (0) | 2024.09.20 |
---|---|
[Docker] credential (0) | 2024.08.09 |
[Docker] Docker network for communication among containers (0) | 2023.04.23 |
[Docker] Host to container network (0) | 2023.04.19 |
[Docker] volume with CLI (0) | 2022.05.19 |