[Docker] manifest digest vs index digest

2024. 10. 21. 17:12·기타/Docker

 

 

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 대신 Podman 으로 이미지 업로드 하기  (0) 2026.01.21
[Error] Docker Desktop - WSL integration with distro 'Ubuntu' Unexpectdly stopped. Do you want to restart it?  (0) 2025.04.17
[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' 카테고리의 다른 글
  • Docker 대신 Podman 으로 이미지 업로드 하기
  • [Error] Docker Desktop - WSL integration with distro 'Ubuntu' Unexpectdly stopped. Do you want to restart it?
  • [Docker] Multi Stage
  • [Docker] credential
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    Programmers
    database
    알고리즘
    PostgreSQL
    ubuntu
    C++
    백준
    java
    Bitcoin
    android
    프로그래머스
    Spring
    Git
    Kotlin
    docker
    JPA
    linux
    kafka
    javascript
    algorithm
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[Docker] manifest digest vs index digest
상단으로

티스토리툴바