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 javjava 이미지와 일치하지 않아요.

REPOSITORYTAG를 모두 제공하면 그 저장소와 태그에 일치하는 이미지만 나열돼요. 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 지시자를 쓰면 열 헤더도 함께 출력해요.

다음 예제는 헤더 없는 템플릿으로 모든 이미지의 IDRepository를 콜론(:) 구분으로 출력해요.

$ 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"}

더 알아보기