개발하는 자몽

[Docker] 도커 <none>/dangling image 삭제 본문

Architecture & Tool/Docker

[Docker] 도커 <none>/dangling image 삭제

jaamong 2023. 11. 3. 20:20

항상 도커 컨테이너를 생성하고 삭제만 했지, 도커 이미지를 확인할 생각을 하지 않았다. 

 

아래 명령어로 이미지 목록을 조회해 보니 엄청난 수의 `<none>:<none>` 이미지들이 있었다.

$ docker images
REPOSITORY		TAG			IMAGE ID		CREATED		SIZE
<none>			<none>          
<none>			<none>          
<none>			<none>          
.
.
.

 

해당 이미지들은 많은 용량을 차지하고 있었기 때문에 지워줄 필요가 있었다. 하지만 `none`으로 태그 된 이미지들을 하나하나 지우기에는 좀... 그랬다...

 

그래서 바로 해당 태그들을 한 번에 지울 수 있는 방법을 검색해 봤는데, 역시나 다들 똑같은 생각을 하는 것 같다.

 

도커 이미지 삭제

도커 특정 이미지를 삭제할 때는 아래 명령어를 사용하면 된다. 이때 해당 이미지를 사용 중인 컨테이너가 있다면 삭제할 수 없다.

$ docker rmi image_id

`rm`은 remove, `i`는 image의 줄임말이다. 

 

<none> image

`<none>` 이미지는 `dangling image` 라고 부르는데, 더 이상 사용되지 않는 이미지를 뜻한다. 생성 원인은 빌드 실패나 이미지 빌드 시 태그명이 중복되거나 등이 있다. 

 

`<none>` 태그를 가진 이미지를 모두 지울 때는 아래 명령어를 사용하면 된다.

$ docker rmi $(docker images -f "dangling=true" -q)
  • `-f` 옵션: `filter`를 뜻하며 `dangling=true` 필터를 지정하여, dangling 이미지 목록만 보여준다.
  • `-q` 옵션: `IMAGE ID` 목록만 조회

 

위 명령어를 사용했을 때 아래 같은 에러가 발생할 수도 있다. 

Error response from daemon: conflict: unable to remove repository reference "..." (must force) - container container_id is using its referenced image image_id

에러의 의미는 `image_id` 이미지를 사용중인 컨테이너가 실행 중이므로 삭제할 수 없다는 뜻으로, 해당 컨테이너를 중지시킨 후 다시 이미지를 삭제하면 된다.

 

또는 `-f/--force` 옵션을 사용하여 강제로 삭제시킬 수 있다.

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

 

`-f` 옵션은 강제로 삭제하기 때문에 항상 어떤 이미지인지 확인해 보고 사용해야 한다.

 

prune

`prune` 명령어도 dangling 이미지를 삭제해준다. `prune` 명령어는 Docker API 1.25 이상부터 지원된다.

$ docker image prune

 

 

 

 

 

참고

 

[Docker] <none> image야 잘 가~!

도커에서 컨테이너 생성하는데 자꾸 에러가 나서 Dockerfile을 고치고 이미지 다시 생성하고 컨테이너 생성해보고 반복 삽질 중인 평화로운 나날이었다. 그런데 어느 순간 sudo docker images 를 쳐보니

elsboo.tistory.com

 

Docker 이미지를 삭제하는 방법(docker rmi)

docker rmi나 docker image 명령어로 특정 Docker 이미지나 사용하지 않는 이미지들을 일괄 삭제하는 방법을 소개합니다.

www.lainyzine.com

Comments