Docker 이미지를 나열하고 제거하는 방법은 무엇입니까?

게시 됨: 2021-08-03

Docker는 애플리케이션과 함께 OS 및 종속 라이브러리를 패키징하는 컨테이너로 애플리케이션 실행 및 배송을 관리할 수 있는 잘 알려진 플랫폼입니다.

주로 Docker 이미지를 나열하고 필요한 정보를 얻은 다음 하나 이상의 이미지를 효율적인 방법으로 제거하는 방법을 학습하여 Docker 이미지 관리에 대해 설명합니다.

시작하겠습니다.

Docker 이미지 나열

가져온 Docker 이미지를 나열하려면 다음을 사용하십시오.

 abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

다른 docker 명령과 마찬가지로 여러 옵션이 있는 images 명령을 지원합니다.

 $ docker images [OPTIONS] [REPOSITORY[:TAG]]

옵션 없이 docker images 를 실행하면 docker image ls 와 같은 최상위 이미지, 저장소 및 태그, 디스크 크기가 표시됩니다.

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

이러한 이미지에는 사용성을 높이고 빌드 프로세스를 가속화하며 위의 명령으로 표시되지 않는 디스크 사용량을 줄이는 중간 레이어가 있습니다. SIZE 는 이미지와 모든 상위 이미지가 차지하는 결합된 공간입니다. 도커가 이미지를 save 때 이미지의 내용을 Tar 파일로 저장하면 나열된 크기와 같습니다.

IMAGE ID 로 식별되는 단일 이미지가 나열된 SIZE 를 한 번만 사용하지만 이미지에 여러 리포지토리 이름 또는 태그가 있는 경우 이미지가 여러 번 나열됩니다.

가장 최근 이미지 나열

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

리포지토리 및 태그별로 이미지 나열

특정 리포지토리에 속한 모든 이미지를 나열하려면 다음과 같이 리포지토리 이름을 지정합니다.

 abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

더 필터링된 출력을 위해 태그를 사용하여 리포지토리 이름을 추가로 지정할 수 있습니다.

 abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

전체 길이 이미지 ID 나열

IMAGE ID 를 자르지 않고 모든 이미지를 나열하려면 다음을 사용하십시오.

 abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$

이미지 다이제스트 나열

v2 이상 형식을 사용하는 Docker 이미지에는 digest 라고 하는 콘텐츠 주소 지정 가능 식별자가 있습니다. 이미지 다이제스트 값을 나열하려면 --digest 플래그를 다음과 같이 사용합니다.

 abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

2.0 레지스트리를 사용하면 이러한 다이제스트를 push , pull , create , runrmi 명령과 함께 사용할 수 있습니다. 이것은 DockerfileFROM 명령에서도 작동합니다.

출력 필터링

docker 명령은 --filter 플래그를 사용하여 images 필터링을 지원합니다. 현재 지원되는 필터는 다음과 같습니다.

  • 댕글링(부울 – 참 또는 거짓)
  • 레이블( label=<key> 또는 label=<key>=<value> )
  • before ( <image-name>[:<tag>] , <image id> 또는 <image@digest> ) – 지정된 ID 또는 참조 전에 생성된 이미지 필터링
  • since ( <image-name>[:<tag>] , <image id> or <image@digest> ) – 주어진 id 또는 참조 이후에 생성된 필터 이미지
  • 참조(이미지 참조의 패턴) – 참조가 지정된 패턴과 일치하는 이미지 필터링

또한 다음과 같이 필터를 결합하여 여러 필터를 사용할 수 있습니다.

 $ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"

예시:

 abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$

출력 형식 지정

docker images 는 다른 명령, 스크립팅 또는 기타와의 중첩에 필요할 수 있는 형식화 출력을 지원합니다. --format 플래그에 대해 지원되는 자리 표시자는 다음과 같습니다.

자리 표시자 설명
.ID 이미지 ID
.Repository 이미지 저장소
.Tag 이미지 태그
.Digest 이미지 다이제스트
.CreatedSince 이미지가 생성된 후 경과된 시간
.CreatedAt 이미지가 생성된 시간
.Size 이미지 디스크 크기

예를 들어 아래 명령은 헤더 없이 출력을 인쇄하고 모든 이미지에 대해 콜론( : )으로 구분된 IDRepository 를 출력합니다.

 abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$

또는 저장소 및 태그가 있는 모든 이미지를 테이블 형식으로 나열하려면 다음을 사용할 수 있습니다.

 abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$

도커 이미지 제거

시스템에서 하나 이상의 Docker 이미지를 제거하려면 다음을 사용합니다.

 $ docker image rm [OPTIONS] IMAGE [IMAGE...]

단일 이미지를 제거하려면 이미지 이름을 지정하기만 하면 됩니다.

 abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$

또는 여러 이미지를 제거하려면 공백으로 구분하여 여러 이미지 이름을 지정하십시오.

 abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$

강제 제거

삭제하려는 이미지를 사용하는 컨테이너가 실행 중일 수 있습니다. 이러한 경우 참조된 이미지를 삭제하려고 하면 Docker에서 경고를 표시합니다.

 abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$

연결된 컨테이너를 먼저 중지한 다음 다시 시도하거나 -f 플래그를 사용하여 이미지를 강제로 제거할 수 있습니다(주의).

 abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$

이미지 정리

사용하지 않는 이미지가 디스크 공간을 소비하거나 오래된 매달린 이미지를 정리해야 하는 특정 상황이 있습니다. 다음을 사용하여 사용하지 않는 이미지를 정리할 수 있습니다.

 $ docker image prune

예시:

 abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$

컨테이너에서 사용하지 않는 모든 이미지도 정리하려면 -a 플래그를 사용하세요.

 abhisheknair@geekflare:~$ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$

또한 --force 또는 -f 플래그를 사용하여 확인 없이 정리를 진행하거나 --filter 플래그를 사용하여 prune 명령에 필터 값(예: 'until=<timestamp>')을 제공할 수 있습니다.

예시:

 $ docker image prune -a --force --filter "until=2021-01-04T00:00:00"

또는

 $ docker image prune --filter="label=deprecated"

rmi 명령 사용

docker와 함께 rmi 명령을 사용하여 이미지를 제거할 수도 있습니다.

Docker 노드에서 하나 이상의 이미지를 제거(및 태그 해제)합니다. 이미지에 여러 태그가 있는 경우 태그와 함께 이 명령을 매개변수로 사용하면 태그만 제거됩니다. 태그가 이미지에 대한 유일한 태그인 경우 이미지와 태그가 모두 제거됩니다.

이 명령은 레지스트리에서 이미지를 제거하지 않습니다. 또한 docker image rm 명령과 같이 -f 옵션을 사용하지 않는 한 실행 중인 컨테이너의 이미지를 제거할 수 없습니다.

예시:

 abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$

--no-prune 을 사용하여 태그가 지정되지 않은 부모를 삭제하지 않도록 지정할 수도 있습니다.

컨테이너 중지 및 이미지 제거

많은 경우 모든 컨테이너를 중지하고 관련된 모든 이미지를 제거해야 할 수 있습니다. 다음과 같이 간단하게 수행할 수 있습니다.

 $ docker rm -vf $(docker ps -a -q)

위의 명령은 실행 중인 모든 컨테이너를 강제로 중지하고 제거합니다. 그런 다음 다음을 사용하여 연결된 이미지를 제거할 수 있습니다.

 $ docker rmi -f $(docker images -a -q)

요약

Docker는 오늘날 DevOps 엔지니어의 무기고의 필수적인 부분이며 Kubernetes와 같은 다른 윙윙거리는 기술의 일부인 다목적 도구입니다. Docker 이미지 관리는 Docker 배포를 관리하고 문제를 해결하는 데 필수적인 부분 중 하나입니다.

이제 docker CLI 명령이 image , imagesrmi 와 같은 명령과 함께 제공하는 기능에 대한 기본 아이디어가 있어야 합니다. 해당 플래그는 추가 사용자 지정을 제공하고 자동화 및 고급 사용에 도움이 될 수 있는 고급 필터링 및 사용자 지정 옵션을 제공합니다.

사용 가능한 옵션 및 관련 도움말 항목에 대한 자세한 내용은 docker [COMMAND] help 을 사용하십시오.