1. 개요


Docker image 빌드 과정에서 생성되는 dangling image를 삭제하는 방법을 소개한다.

2. Dangling Image란


동일한 태그를 가진 Docker 이미지가 빌드될 경우, 기존에 있던 이미지는 삭제되지는 않고, tag가 none으로 변경된 상태로 남아 있게 된다.

다음은 frontend라는 이름의 Docker image 목록을 조회한 결과이다.

[root@devops ~]# docker images frontend
REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
frontend   latest              dae2841620d8        38 hours ago        31.1MB
frontend   <none>              c213f7380098        2 days ago          31.1MB
frontend   <none>              ca001062a8f1        2 months ago        30.7MB

가장 최근에 빌드된 이미지를 제외한 다른 이미지의 tag는 none으로 변경된 것을 알 수 있다.

위와 같이 더 이상 컨테이너에 연결되지 않고, 태그가 없어진 이미지를 Dangling image라고 한다.

이러한 dangling image를 그대로 방치하면 파일시스템 용량을 차지하게 되고, Docker 이미지 확인에도 불편함이 있을 수 있다.

 

3. Dangling Image 조회 및 삭제


dangling image의 목록을 확인하는 커맨드는 다음과 같다.

$ docker images -f dangling=true
  • -f는 필터를 지정하는 옵션이다. 위 명령에서는 dangling 값이 true인 이미지만을 출력하도록 지정한 것이다.

dangling image를 삭제하는 커맨드는 다음과 같다.

$ docker rmi $(docker images -f "dangling=true" -q)
  • -q 옵션을 지정하면, 이미지의 id 값만 출력한다.
  • dangling 값이 true인 이미지만을 삭제하는 명령이다.

 

4. prune 명령어


Docker API 1.25 이상부터는 prune 이라는 명령어를 지원하고 있다.

prune 명령은 사용하지 않는 리소스에 대해 정리하는 역할을 한다.

사용법은 다음과 같다.

# 중지된 모든 컨테이너 삭제
$ docker container prune

# 태깅이 되지 않은 모든 이미지(dangling image) 삭제
$ docker image prune

# 사용되지 않는 도커 네트워크 삭제
$ docker network prune

# 컨테이너에서 사용하지 않는 모든 도커 볼륨 삭제
$ docker volume prune

# 모든 리소스 (컨테이너, 이미지, 네트워크 등) 중 사용하지 않는 리소스 삭제
$ docker system prune -a
  • -a 명령을 사용하면 dangling 이미지 이외에도 사용하지 않는 이미지까지 삭제하므로, 주의한다.