docker image ls
docker image ls
docker image ls는 이미지를 나열하는 명령이에요. 로컬에 어떤 이미지가 있고 크기가 얼마인지 확인하고 싶을 때 가장 기본적으로 쓰는 명령이에요.
출처: 문서
본문
기본 docker images는 모든 최상위 이미지, 그 저장소와 태그, 그리고 크기를 보여 줘요. Docker 이미지에는 재사용성을 높이고 디스크 사용량을 줄이며 docker build를 빨라지게 하는 중간 레이어가 있는데, 각 단계를 캐시할 수 있게 해 주죠. 이 중간 레이어는 기본적으로 표시되지 않아요. 태그 없는(dangling) 이미지도 기본적으로 숨겨져 있어요. -a(--all) 플래그로 중간 레이어와 dangling 이미지를 보여 줄 수 있어요.
SIZE는 해당 이미지와 모든 부모 이미지가 차지하는 누적 공간이에요. 이는 docker save할 때 만들어지는 Tar 파일의 내용이 쓰는 디스크 공간이기도 해요. 이미지에 저장소 이름이나 태그가 여러 개면 이미지가 두 번 이상 나열돼요. 이 단일 이미지(일치하는 IMAGE ID로 식별)는 나열된 SIZE를 한 번만 차지해요.
사용법 (Usage)
docker image ls [OPTIONS] [REPOSITORY[:TAG]]
별칭 (Aliases)
별칭은 긴 명령 대신 쓸 수 있는 짧고 기억하기 쉬운 대안이에요.
docker image list, docker images
옵션 (Options)
| 옵션 | 기본값 | 설명 |
|---|---|---|
-a, --all |
모든 이미지를 보여 줘요 (기본은 중간·dangling 이미지를 숨김) | |
--digests |
다이제스트를 보여 줘요 | |
-f, --filter |
주어진 조건에 따라 출력을 필터링해요 | |
--format |
사용자 지정 템플릿으로 출력 형식을 정해요: table(기본, 열 머리글 있는 테이블), table TEMPLATE(Go 템플릿 사용 테이블), json(JSON), TEMPLATE(Go 템플릿 사용 출력). 템플릿 출력 포맷팅에 대한 자세한 내용은 https://docs.docker.com/go/formatting/ 참고 |
|
--no-trunc |
출력을 자르지 않아요 | |
-q, --quiet |
이미지 ID만 보여 줘요 | |
--tree |
API 1.47+ 실험적(CLI) 멀티플랫폼 이미지를 트리로 나열해요 (실험적) |
예제 (Examples)
가장 최근에 생성된 이미지 나열하기
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 77af4d6b9913 19 hours ago 1.089 GB
committ latest b6fa739cedf5 19 hours ago 1.089 GB
<none> <none> 78a85c484f71 19 hours ago 1.089 GB
docker latest 30557a29d5ab 20 hours ago 1.089 GB
<none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
postgres 9 746b819f315e 4 days ago 213.4 MB
postgres 9.3 746b819f315e 4 days ago 213.4 MB
postgres 9.3.5 746b819f315e 4 days ago 213.4 MB
postgres latest 746b819f315e 4 days ago 213.4 MB
이름과 태그로 이미지 나열하기
docker images 명령은 인자와 일치하는 이미지로 목록을 제한하는 선택적 [REPOSITORY[:TAG]] 인자를 받아요. REPOSITORY는 지정했지만 TAG를 지정하지 않으면 docker images 명령은 주어진 저장소의 모든 이미지를 나열해요. 예를 들어 java 저장소의 모든 이미지를 나열하려면:
$ docker images java
REPOSITORY TAG IMAGE ID CREATED SIZE
java 8 308e519aac60 6 days ago 824.5 MB
java 7 493d82594c15 3 months ago 656.3 MB
java latest 2711b1d6f3aa 5 months ago 603.9 MB
[REPOSITORY[:TAG]] 값은 정확히 일치해야 해요. 예를 들어 docker images jav는 java 이미지와 일치하지 않아요. REPOSITORY와 TAG가 모두 제공되면 해당 저장소와 태그에 일치하는 이미지만 나열돼요. java 저장소에서 태그 8인 모든 로컬 이미지를 찾으려면:
$ docker images java:8
REPOSITORY TAG IMAGE ID CREATED SIZE
java 8 308e519aac60 6 days ago 824.5 MB
REPOSITORY[:TAG]와 일치하는 것이 없으면 목록은 비어 있어요.
$ docker images java:0
REPOSITORY TAG IMAGE ID CREATED SIZE
전체 길이 이미지 ID 나열하기 (--no-trunc)
$ docker images --no-trunc
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> sha256:77af4d6b9913e693e8d0b4b294fa62ade6054e6b2f1ffb617ac955dd63fb0182 19 hours ago 1.089 GB
committest latest sha256:b6fa739cedf5ea12a620a439402b6004d057da800f91c7524b5086a5e4749c9f 19 hours ago 1.089 GB
<none> <none> sha256:78a85c484f71509adeaace20e72e941f6bdd2b25b4c75da8693efd9f61a37921 19 hours ago 1.089 GB
docker latest sha256:30557a29d5abc51e5f1d5b472e79b7e296f595abcf19fe6b9199dbbc809c6ff4 20 hours ago 1.089 GB
<none> <none> sha256:0124422dd9f9cf7ef15c0617cda3931ee68346455441d66ab8bdc5b05e9fdce5 20 hours ago 1.089 GB
<none> <none> sha256:18ad6fad340262ac2a636efd98a6d1f0ea775ae3d45240d3418466495a19a81b 22 hours ago 1.082 GB
<none> <none> sha256:f9f1e26352f0a3ba6a0ff68167559f64f3e21ff7ada60366e2d44a04befd1d3a 23 hours ago 1.089 GB
tryout latest sha256:2629d1fa0b81b222fca63371ca16cbf6a0772d07759ff80e8d1369b926940074 23 hours ago 131.5 MB
<none> <none> sha256:5ed6274db6ceb2397844896966ea239290555e74ef307030ebb01ff91b1914df 24 hours ago 1.089 GB
이미지 다이제스트 나열하기 (--digests)
v2 이상 형식을 쓰는 이미지에는 digest라는 content-addressable 식별자가 있어요. 이미지를 생성하는 데 쓰인 입력이 바뀌지 않는 한 digest 값은 예측 가능해요. 이미지 digest 값을 나열하려면 --digests 플래그를 써요.
$ docker images --digests
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
localhost:5000/test/busybox <none> sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 4986bf8c1536 9 weeks ago 2.43 MB
2.0 레지스트리로 push·pull할 때 push·pull 명령 출력에는 이미지 digest가 포함돼요. digest 값으로 pull할 수 있고, create, run, rmi 명령과 Dockerfile의 FROM 이미지 참조에서 digest로 참조할 수도 있어요.
필터링하기 (--filter)
필터링 플래그(-f 또는 --filter) 형식은 "key=value"예요. 필터가 여러 개면 여러 플래그를 넘겨요(예: --filter "foo=bar" --filter "bif=baz"). 현재 지원되는 필터는 다음과 같아요.
dangling(불리언 -true또는false)label(label=<key>또는label=<key>=<value>)before(<image-name>[:<tag>],<image id>또는<image@digest>) - 주어진 id 또는 참조보다 먼저 생성된 이미지를 필터링since(<image-name>[:<tag>],<image id>또는<image@digest>) - 주어진 id 또는 참조 이후에 생성된 이미지를 필터링reference(이미지 참조 패턴) - 참조가 지정한 패턴과 일치하는 이미지를 필터링
태그 없는 이미지 보여 주기 (dangling)
$ docker images --filter "dangling=true"
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 8abc22fbb042 4 weeks ago 0 B
<none> <none> 48e5f45168b9 4 weeks ago 2.489 MB
<none> <none> bf747efa0e2f 4 weeks ago 0 B
<none> <none> 980fe10e5736 12 weeks ago 101.4 MB
<none> <none> dea752e4e117 12 weeks ago 101.4 MB
<none> <none> 511136ea3c5a 8 months ago 0 B
이 명령은 이미지 트리의 리프(중간 레이어가 아님)인 태그 없는 이미지를 표시해요. 이런 이미지는 이미지의 새 빌드가 repo:tag를 이미지 ID에서 가져가 <none>:<none> 또는 태그 없는 상태로 남길 때 생겨요. 컨테이너가 현재 이미지를 사용 중일 때 제거하려 하면 경고가 발생해요. 이 플래그가 있으면 일괄 정리를 할 수 있어요. docker rmi와 함께 쓸 수 있어요.
$ docker rmi $(docker images -f "dangling=true" -q)
8abc22fbb042
48e5f45168b9
bf747efa0e2f
980fe10e5736
dea752e4e117
511136ea3c5a
Docker는 이 태그 없는 이미지를 사용하는 컨테이너가 있으면 경고해요.
주어진 라벨로 이미지 보여 주기
label 필터는 라벨의 존재만으로 또는 라벨과 값으로 이미지를 매칭해요. 다음 필터는 값과 무관하게 com.example.version 라벨이 있는 이미지를 매칭해요.
$ docker images --filter "label=com.example.version"
REPOSITORY TAG IMAGE ID CREATED SIZE
match-me-1 latest eeae25ada2aa About a minute ago 188.3 MB
match-me-2 latest dea752e4e117 About a minute ago 188.3 MB
다음 필터는 com.example.version 라벨 값이 1.0인 이미지를 매칭해요.
$ docker images --filter "label=com.example.version=1.0"
REPOSITORY TAG IMAGE ID CREATED SIZE
match-me latest 511136ea3c5a About a minute ago 188.3 MB
이 예제에서 0.1 값으로는 일치하는 항목이 없어 빈 집합을 반환해요.
$ docker images --filter "label=com.example.version=0.1"
REPOSITORY TAG IMAGE ID CREATED SIZE
시간으로 이미지 필터링하기
before 필터는 주어진 ID나 참조를 가진 이미지보다 먼저 생성된 이미지만 보여 줘요. 예를 들어 이런 이미지들이 있다고 해 볼게요.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
image1 latest eeae25ada2aa 4 minutes ago 188.3 MB
image2 latest dea752e4e117 9 minutes ago 188.3 MB
image3 latest 511136ea3c5a 25 minutes ago 188.3 MB
before로 필터링하면 다음과 같아요.
$ docker images --filter "before=image1"
REPOSITORY TAG IMAGE ID CREATED SIZE
image2 latest dea752e4e117 9 minutes ago 188.3 MB
image3 latest 511136ea3c5a 25 minutes ago 188.3 MB
since로 필터링하면 다음과 같아요.
$ docker images --filter "since=image3"
REPOSITORY TAG IMAGE ID CREATED SIZE
image1 latest eeae25ada2aa 4 minutes ago 188.3 MB
image2 latest dea752e4e117 9 minutes ago 188.3 MB
참조로 이미지 필터링하기
reference 필터는 참조가 지정한 패턴과 일치하는 이미지만 보여 줘요.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest e02e811dd08f 5 weeks ago 1.09 MB
busybox uclibc e02e811dd08f 5 weeks ago 1.09 MB
busybox musl 733eb3059dce 5 weeks ago 1.21 MB
busybox glibc 21c16b6787c6 5 weeks ago 4.19 MB
reference로 필터링하면 다음과 같아요.
$ docker images --filter=reference='busy*:*libc'
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox uclibc e02e811dd08f 5 weeks ago 1.09 MB
busybox glibc 21c16b6787c6 5 weeks ago 4.19 MB
여러 reference로 필터링하면 A 또는 B 중 하나가 일치해요.
$ docker images --filter=reference='busy*:uclibc' --filter=reference='busy*:glibc'
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox uclibc e02e811dd08f 5 weeks ago 1.09 MB
busybox glibc 21c16b6787c6 5 weeks ago 4.19 MB
출력 형식 지정하기 (--format)
형식 옵션(--format)은 Go 템플릿으로 컨테이너 출력을 pretty-print해요. Go 템플릿의 유효한 자리표시자는 다음과 같아요.
| 자리표시자 | 설명 |
|---|---|
.ID |
이미지 ID |
.Repository |
이미지 저장소 |
.Tag |
이미지 태그 |
.Digest |
이미지 다이제스트 |
.CreatedSince |
이미지가 생성된 이후 경과 시간 |
.CreatedAt |
이미지가 생성된 시각 |
.Size |
이미지 디스크 크기 |
--format 옵션을 쓰면 image 명령은 템플릿이 선언한 대로 데이터를 정확히 출력하거나, table 지시자를 쓰면 열 머리글도 포함해요. 다음 예제는 머리글이 없는 템플릿을 써서 모든 이미지에 대해 콜론(:)으로 구분된 ID와 Repository 항목을 출력해요.
$ docker images --format "{{.ID}}: {{.Repository}}"
77af4d6b9913: <none>
b6fa739cedf5: committ
78a85c484f71: <none>
30557a29d5ab: docker
5ed6274db6ce: <none>
746b819f315e: postgres
746b819f315e: postgres
746b819f315e: postgres
746b819f315e: postgres
모든 이미지를 저장소와 태그와 함께 테이블 형식으로 나열하려면 이렇게 써요.
$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
77af4d6b9913 <none> <none>
b6fa739cedf5 committ latest
78a85c484f71 <none> <none>
30557a29d5ab docker latest
5ed6274db6ce <none> <none>
746b819f315e postgres 9
746b819f315e postgres 9.3
746b819f315e postgres 9.3.5
746b819f315e postgres latest
모든 이미지를 JSON 형식으로 나열하려면 json 지시자를 써요.
$ docker images --format json
{"Containers":"N/A","CreatedAt":"2021-03-04 03:24:42 +0100 CET","CreatedSince":"5 days ago","Digest":"\u003cnone\u003e","ID":"4dd97cefde62","Repository":"ubuntu","SharedSize":"N/A","Size":"72.9MB","Tag":"latest","UniqueSize":"N/A"}
{"Containers":"N/A","CreatedAt":"2021-02-17 22:19:54 +0100 CET","CreatedSince":"2 weeks ago","Digest":"\u003cnone\u003e","ID":"28f6e2705743","Repository":"alpine","SharedSize":"N/A","Size":"5.61MB","Tag":"latest","UniqueSize":"N/A"}