이미지 다이제스트
이미지 다이제스트 (Image digests)
Docker 이미지 다이제스트가 무엇이고 어떻게 쓰는지 알아볼게요.
출처: 문서
본문
Docker 이미지 다이제스트란 (What are Docker image digests?)
Docker 이미지 다이제스트는 Docker 이미지의 내용을 나타내는 고유한 암호화 식별자(SHA-256 해시)예요. 재사용되거나 변경될 수 있는 태그와 달리, 다이제스트는 불변이며 매번 정확히 같은 이미지가 풀되게 보장해요. 이는 서로 다른 환경과 배포에서 일관성을 보장해요.
예를 들어 nginx:latest 이미지의 다이제스트는 다음과 같을 수 있어요:
sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a
이 다이제스트는 nginx:latest 이미지의 특정 버전을 고유하게 식별해, 이미지 내용에 어떤 변경이든 다른 다이제스트를 만들게 해요.
이미지 다이제스트가 중요한 이유 (Why are image digests important?)
태그 대신 이미지 다이제스트를 사용하면 몇 가지 이점이 있어요:
- 불변성: 이미지가 빌드되고 다이제스트가 생성되면 그 다이제스트에 묶인 내용은 바뀔 수 없어요. 즉 다이제스트로 이미지를 풀하면 원래 빌드된 것과 정확히 같은 이미지를 검색하고 있다는 것을 확신할 수 있어요.
- 보안: 다이제스트는 이미지 내용이 변조되지 않았음을 보장해 공급망 공격을 방지해요. 이미지 내용의 작은 변경조차 완전히 다른 다이제스트를 만들어요.
- 일관성: 다이제스트를 사용하면 서로 다른 환경에서 같은 이미지가 사용되어, 개발·스테이징·프로덕션 환경 간 불일치 위험을 줄여요.
Docker Hardened Image 다이제스트 (Docker Hardened Image digests)
이미지 다이제스트로 DHI를 참조하면 애플리케이션이 항상 정확히 같은 안전한 이미지 버전을 사용하게 되어 보안과 규정 준수를 강화해요.
이미지 다이제스트 보기 (View an image digest)
Docker CLI 사용
Docker 이미지의 다이제스트를 보려면 다음 명령을 사용하세요. <image-name>:<tag>를 이미지 이름과 태그로 바꾸세요.
$ docker buildx imagetools inspect <image-name>:<tag>
Docker Hub UI 사용
- Docker Hub로 가서 로그인하세요.
- 조직의 네임스페이스로 이동해 미러된 DHI 저장소를 여세요.
- Tags 탭을 선택해 이미지 변형을 보세요.
- 목록의 각 태그에는 이미지의 SHA-256 값을 보여주는 Digest 필드가 포함돼 있어요.
다이제스트로 이미지 풀 (Pull an image by digest)
다이제스트로 이미지를 풀하면 지정된 다이제스트로 식별된 정확한 이미지 버전을 풀고 있다는 것을 보장해요.
Docker 이미지를 그 다이제스트로 풀려면 다음 명령을 사용하세요. <image-name>을 이미지 이름으로, <digest>를 이미지 다이제스트로 바꾸세요.
$ docker pull <image-name>@sha256:<digest>
예를 들어 94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a 다이제스트로 docs/dhi-python:3.13 이미지를 풀려면:
$ docker pull docs/dhi-python@sha256:94a00394bc5a8ef503fb59db0a7d0ae9e1110866e8aee8ba40cd864cea69ea1a
멀티 플랫폼 이미지와 매니페스트 (Multi-platform images and manifests)
Docker Hardened Images는 멀티 플랫폼 이미지로 게시돼요. 즉 단일 이미지 태그(예: docs/dhi-python:3.13)가 linux/amd64, linux/arm64 등을 포함한 여러 운영 체제와 CPU 아키텍처를 지원할 수 있어요.
단일 이미지를 가리키는 대신 멀티 플랫폼 태그는 매니페스트 목록(인덱스라고도 함)을 가리키는데, 이는 지원되는 각 플랫폼별 하나씩 여러 이미지 다이제스트를 참조하는 더 높은 수준의 객체예요.
docker buildx imagetools inspect로 멀티 플랫폼 이미지를 조사하면 다음과 같이 보여요:
Name: docs/dhi-python:3.13
MediaType: application/vnd.docker.distribution.manifest.list.v2+json
Digest: sha256:6e05...d231
Manifests:
Name: docs/dhi-python:3.13@sha256:94a0...ea1a
Platform: linux/amd64
...
Name: docs/dhi-python:3.13@sha256:7f1d...bc43
Platform: linux/arm64
...
- 매니페스트 목록 다이제스트(
sha256:6e05...d231)는 전체 멀티 플랫폼 이미지를 식별해요. - 각 플랫폼별 이미지는 자체 다이제스트를 가져요(예:
linux/amd64는sha256:94a0...ea1a).
이것이 중요한 이유 (Why this matters)
- 재현성: 서로 다른 아키텍처에서 컨테이너를 빌드하거나 실행한다면, 태그만 사용해도 여러분의 플랫폼에 대한 적절한 이미지 다이제스트로 해석돼요.
- 검증: 플랫폼의 특정 이미지 다이제스트를 풀고 검증해, 매니페스트 목록뿐 아니라 정확한 이미지 버전을 사용하고 있는지 확인할 수 있어요.
- 정책 시행: Docker Scout로 다이제스트 기반 정책을 시행할 때 각 플랫폼 변형이 그 다이제스트를 사용해 개별적으로 평가돼요.