본문 바로가기

DevOps & Infra/Docker

[Infrastructure/Docker] dangling 및 <none> 태그 이미지 삭제하기

dangling 이미지 삭제

도커를 사용하다보면 <none> 태그의 이미지들이 쌓이게 됩니다. 이미 동일한 태그를 갖고 있는 이미지가 존재하는데 새로운 이미지를 Pull하게 되었을 때 기존 이미지의 태그는 <none>으로 변경되고, 이를 dangling 이미지라고 부릅니다.

# docker images
REPOSITORY           TAG        IMAGE ID       CREATED          SIZE
namepgb/rw-private   1.0-test   284a7fbc3615   18 minutes ago   840MB
namepgb/rw-private   <none>     2be9a90780a6   19 hours ago     840MB
namepgb/rw-private   <none>     3392e04687ac   19 hours ago     840MB

dangling 이미지를 확인하려면 다음 명령어를 사용합니다. -f 플래그는 필터를 지정하는 태그입니다.

$ docker images -f dangling=true
REPOSITORY           TAG        IMAGE ID       CREATED          SIZE
namepgb/rw-private   <none>     2be9a90780a6   19 hours ago     840MB
namepgb/rw-private   <none>     3392e04687ac   19 hours ago     840MB

dangling 이미지의 ID만 출력하려면 다음과 같습니다. -q 플래그는 이미지의 ID만 출력합니다.

$ docker images -f "dangling=true" -q
2be9a90780a6
3392e04687ac

모든 dangling 이미지를 삭제하려면 다음과 같습니다. rmi 명령어를 사용하여 이미지를 삭제하는데, 선행 명령어로 dangling 이미지의 ID를 추출하여 인자로 전달합니다.

$ docker rmi $(docker images -f "dangling=true" -q)

prune을 사용한 dangling 이미지 삭제

Docker API 1.25 버전 이상부터 prune 명령어를 지원합니다. prune은 사용하지 않는 리소스를 정리하기 위해 호출하는데, 도커의 컨테이너와 이미지, 네트워크, 볼륨 등에 걸쳐 사용 할 수 있습니다.

다음과 같이 prune을 사용하면 태깅되지 않은 이미지(<none> 태그의 이미지)를 삭제할 수 있습니다.

$ docker image prune

-a 플래그를 추가하면 dangling 이미지 외에도 미사용 이미지 전체를 삭제 할 수 있습니다.

$ docker image prune -a