docker image ls
docker image ls
로컬에 있는 이미지 목록을 보여주는 명령이에요. 이미지의 저장소, 태그, 크기를 확인하고 다양한 조건으로 필터링하고 싶을 때 사용해요. 별칭으로 docker image list, docker images를 쓸 수 있어요.
출처: 문서
본문
기본 docker images는 모든 최상위 이미지와 저장소·태그·크기를 보여줘요.
Docker 이미지는 중간 레이어(intermediate layer)를 가져서 재사용성을 높이고, 디스크 사용을 줄이며, 각 단계를 캐시할 수 있게 해줘 docker build를 빠르게 만들어요. 이 중간 레이어는 기본적으로 표시되지 않아요.
태그되지 않은(댕글링) 이미지도 기본적으로 숨겨져요. 중간 레이어와 댕글링 이미지를 보려면 -a(--all) 플래그를 사용해요.
SIZE는 이미지와 모든 부모 이미지가 차지하는 누적 공간이에요. 이것은 docker save로 이미지를 저장할 때 생성되는 Tar 파일 내용의 디스크 공간이기도 해요.
이미지가 여러 저장소 이름이나 태그를 가지면 한 번 이상 나열될 수 있어요. 이 단일 이미지(일치하는 IMAGE ID로 식별)는 SIZE를 한 번만 차지해요.
docker image ls [OPTIONS] [REPOSITORY[:TAG]]
지원하는 옵션은 다음과 같아요.
| 옵션 | 기본값 | 설명 |
|---|---|---|
-a, --all |
모든 이미지 표시 (기본값은 중간·댕글링 이미지 숨김) | |
--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) 멀티 플랫폼 이미지를 트리로 나열 (EXPERIMENTAL) |
가장 최근에 만든 이미지 나열
$ 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
이미지 다이제스트 나열 (--digests)
v2 이상 형식을 사용하는 이미지는 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 명령 출력에는 이미지 다이제스트가 포함돼요. 다이제스트 값으로 pull할 수 있어요. create, run, rmi 명령과 Dockerfile의 FROM 이미지 참조에서도 다이제스트로 참조할 수 있어요.
필터링 (--filter)
필터링 플래그(-f 또는 --filter) 형식은 "key=value"예요. 필터가 둘 이상이면 여러 플래그를 전달해요 (예: --filter "foo=bar" --filter "bif=baz").
현재 지원되는 필터는 다음과 같아요.
- dangling (boolean - 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 (이미지 참조 패턴) - 참조가 지정된 패턴과 일치하는 이미지 필터링
태그되지 않은 이미지(댕글링) 표시
$ 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
이 필터는 이미지 트리의 잎(중간 레이어가 아닌)인 태그되지 않은 이미지를 표시해요. 이러한 이미지는 이미지의 새 빌드가 repo:tag를 이미지 ID에서 가져가 <none>:<none> 또는 태그되지 않은 상태로 남길 때 발생해요. 컨테이너가 현재 사용 중인 이미지를 제거하려고 하면 경고가 표시돼요. 이 플래그를 쓰면 일괄 정리가 가능해요.
docker rmi와 함께 사용할 수 있어요.
$ docker rmi $(docker images -f "dangling=true" -q)
8abc22fbb042
48e5f45168b9
bf747efa0e2f
980fe10e5736
dea752e4e117
511136ea3c5a
이 태그되지 않은 이미지를 사용하는 컨테이너가 있으면 Docker는 경고를 표시해요.
주어진 라벨을 가진 이미지 표시
label 필터는 label의 존재만으로 또는 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 템플릿으로 컨테이너 출력을 예쁘게 정리해요.
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"}