Quick Comparison
| 참조 | 먼저 고를 때 | 바뀔 수 있는 것 |
|---|---|---|
ubuntu:24.04 | 개발·일반 버전 추적 | registry 관리자가 다른 이미지로 재지정할 수 있음 |
ubuntu@sha256:... | 운영 배포를 특정 내용으로 고정 | 자동 보안 업데이트를 받지 않음 |
my-app:1.4.2 | 사람이 읽는 릴리스 식별 | tag가 동일 내용을 계속 가리킨다는 보장은 없음 |
my-app:latest | tag를 생략했을 때의 기본값 | 최신·안정 버전이라는 의미가 아님 |
# 사람이 읽는 버전 tag
FROM node:22-alpine
# 검토한 특정 내용을 고정
FROM node@sha256:<reviewed-digest>tag는 registry에서 이동할 수 있는 이름이고, digest는 pull한 특정 manifest 내용을 가리키는 식별자입니다. 운영에서 digest를 쓰면 변경된 digest 자체가 배포 변경점이 됩니다.
tag와 digest
tag는 이름표이고 digest는 내용 주소다
Docker 이미지 tag는 사람이 읽기 쉬운 별칭입니다. node:22-alpine, postgres:16, ubuntu:24.04처럼 버전과 변형을 표현하기 좋습니다. 하지만 tag는 registry에서 다른 이미지로 다시 가리킬 수 있습니다. 같은 tag를 다시 pull했을 때 이전과 다른 레이어를 받을 수 있다는 뜻입니다.
docker image pull ubuntu:24.04digest는 registry가 보낸 manifest 내용을 식별하는 SHA-256 값입니다. 같은 digest를 지정해 pull하면 같은 manifest를 받으므로, 배포 재현성이 필요한 곳에서 특정 버전을 고정하는 데 씁니다.
docker image pull ubuntu@sha256:<digest>latest는 기본값이지 운영 전략이 아니다
tag를 생략하면 기본적으로 latest를 사용합니다. 하지만 latest가 가장 최신 안정 버전이라는 보장은 없습니다. 이미지 작성자가 어떤 정책으로 tag를 갱신하는지에 따라 달라집니다. 운영 배포에서 latest를 쓰면 배포 diff 없이 실행 image가 바뀔 수 있습니다.
services:
app:
image: my-registry.example.com/app@sha256:<reviewed-digest>pinning과 업데이트
digest로 고정하면 베이스 image가 조용히 바뀌지 않습니다. 보안 스캔 결과와 배포된 image가 일치해야 하는 운영 환경에서는 장점입니다. 반면 upstream image가 보안 패치를 받아도 digest는 자동으로 바뀌지 않습니다. 업데이트를 받으려면 새 digest를 확인하고 Dockerfile이나 Compose 파일을 직접 갱신해야 합니다.
FROM ubuntu@sha256:<reviewed-digest>재현성이 중요한 운영 image는 digest를 검토하고, 개발 환경에서는 관리 편의상 명확한 버전 tag를 쓰는 식으로 나눕니다. FROM을 digest로 고정한 image에는 새 보안 패치가 자동으로 들어오지 않으므로, tag를 다시 확인하고 새 digest로 바꾸는 재빌드·검토 주기가 필요합니다.
플랫폼과 배포 기록
멀티 플랫폼 image는 하나의 tag가 여러 플랫폼의 manifest를 묶어 가리킬 수 있습니다. 이 경우 tag 또는 manifest list/index digest를 지정하면 실행 host가 linux/amd64, linux/arm64 변형 중 하나를 고릅니다. 배포 기록에는 digest만 적지 말고 대상 플랫폼과 실제 pull·push 결과도 함께 남깁니다.
# registry에서 현재 tag가 가리키는 multi-platform 정보를 확인
docker buildx imagetools inspect my-registry.example.com/app:1.4.2
# host와 다른 변형을 의도적으로 pull할 때
docker image pull --platform=linux/arm64 my-registry.example.com/app:1.4.2digest를 고정해도 registry 접근 권한, 대상 플랫폼 지원 여부, 런타임 설정까지 고정되는 것은 아닙니다. 실행 재현성은 image reference와 플랫폼, Compose·환경 변수·실행 인자를 함께 버전 관리할 때 닫힙니다.
참고 링크
3 sources