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

더 알아보기 (Learn more)