docker image history

docker image history

이미지가 어떻게 만들어졌는지 그 히스토리를 보여주는 명령이에요. 이미지에 어떤 레이어가 쌓였는지, 각 레이어의 크기와 생성 명령을 확인하고 싶을 때 사용해요. 별칭으로 docker history를 쓸 수 있어요.

출처: 문서

본문

docker image history는 이미지의 히스토리를 보여주는 명령이에요.

docker image history [OPTIONS] IMAGE

예를 들어 docker:latest 이미지가 어떻게 만들어졌는지 보려면:

$ docker history docker

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
3e23a5875458        8 days ago          /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8            0 B
8578938dd170        8 days ago          /bin/sh -c dpkg-reconfigure locales &&    loc   1.245 MB
be51b77efb42        8 days ago          /bin/sh -c apt-get update && apt-get install    338.3 MB
4b137612be55        6 weeks ago         /bin/sh -c #(nop) ADD jessie.tar.xz in /        121 MB
750d58736b4b        6 weeks ago         /bin/sh -c #(nop) MAINTAINER Tianon Gravi <ad   0 B
511136ea3c5a        9 months ago                                                        0 B                 Imported from -

지원하는 옵션은 다음과 같아요.

옵션 기본값 설명
--format 커스텀 템플릿으로 출력 형식 지정: 'table': 열 헤더와 함께 표 형식으로 출력 (기본값), 'table TEMPLATE': 주어진 Go 템플릿으로 표 형식 출력, 'json': JSON 형식 출력, 'TEMPLATE': 주어진 Go 템플릿으로 출력. 템플릿 출력 형식에 대한 자세한 내용은 https://docs.docker.com/go/formatting/ 참고
-H, --human true 크기와 날짜를 사람이 읽기 쉬운 형식으로 출력
--no-trunc 출력을 자르지 않아요
--platform API 1.48+ 주어진 플랫폼의 히스토리 표시. os[/arch[/variant]] 형식 (예: linux/amd64)
-q, --quiet 이미지 ID만 표시

출력 형식 지정 (--format)

--format 옵션은 Go 템플릿으로 히스토리 출력을 예쁘게 정리해요.

Go 템플릿에서 사용할 수 있는 유효한 자리표시자(placeholder)는 다음과 같아요.

자리표시자 설명
.ID 이미지 ID
.CreatedSince --human=true면 이미지 생성 후 경과 시간, 아니면 생성 시각 타임스탬프
.CreatedAt 이미지 생성 시각 타임스탬프
.CreatedBy 이미지를 만드는 데 사용된 명령
.Size 이미지 디스크 크기
.Comment 이미지에 대한 주석

--format을 쓰면 history 명령은 템플릿이 선언한 대로 정확히 데이터를 출력하거나, table 지시자를 쓰면 열 헤더도 함께 출력해요.

헤더 없는 템플릿으로 busybox 이미지의 IDCreatedSince를 콜론(:) 구분으로 출력하는 예시예요.

$ docker history --format "{{.ID}}: {{.CreatedSince}}" busybox

f6e427c148a7: 4 weeks ago
<missing>: 4 weeks ago

특정 플랫폼의 히스토리 표시 (--platform)

--platform 옵션은 여러 플랫폼이 있을 때 어떤 플랫폼 변형의 히스토리를 보여줄지 지정해요. 기본적으로 docker history는 데몬의 네이티브 플랫폼을 보여주고, 없으면 첫 번째 사용 가능한 플랫폼을 보여줘요.

로컬 이미지 저장소에 이미지의 여러 플랫폼 변형이 있으면 --platform 옵션으로 어떤 변형의 히스토리를 볼지 고를 수 있어요. 주어진 플랫폼이 로컬 이미지 캐시에 없으면 오류가 발생해요.

플랫폼 옵션은 os[/arch[/variant]] 형식을 취해요. 예를 들어 linux/amd64 또는 linux/arm64/v8이에요. 아키텍처와 변형은 선택 사항이고, 생략하면 데몬 기본값으로 돌아가요.

다음 예제는 alpine:latest 이미지의 RISC-V 변형을 가져와 그 히스토리를 보여줘요.

$ docker image pull --quiet --platform=linux/riscv64 alpine
docker.io/library/alpine:latest

$ docker image history --platform=linux/riscv64 alpine
IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
beefdbd8a1da   3 weeks ago   /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:ba2637314e600db5a…   8.46MB

다음 예제는 로컬 이미지 저장소에 존재하지 않는 alpine:latest의 플랫폼 변형 히스토리를 요청해 오류가 나는 상황이에요.

$ docker image ls --tree
IMAGE                   ID             DISK USAGE   CONTENT SIZE   IN USE
alpine:latest           beefdbd8a1da       10.6MB         3.37MB
├─ linux/riscv64        80cde017a105       10.6MB         3.37MB
├─ linux/amd64          33735bd63cf8           0B             0B
├─ linux/arm/v6         50f635c8b04d           0B             0B
├─ linux/arm/v7         f2f82d424957           0B             0B
├─ linux/arm64/v8       9cee2b382fe2           0B             0B
├─ linux/386            b3e87f642f5c           0B             0B
├─ linux/ppc64le        c7a6800e3dc5           0B             0B
└─ linux/s390x          2b5b26e09ca2           0B             0B

$ docker image history --platform=linux/s390x alpine
Error response from daemon: image with reference alpine:latest was found but does not match the specified platform: wanted linux/s390x

더 알아보기