Docker image 빌드 과정에서 생성되는 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 이미지 확인에도 불편함이 있을 수 있다.
dangling image의 목록을 확인하는 커맨드는 다음과 같다.
$ docker images -f dangling=true
-f는 필터를 지정하는 옵션이다. 위 명령에서는 dangling 값이 true인 이미지만을 출력하도록 지정한 것이다.
dangling image를 삭제하는 커맨드는 다음과 같다.
$ docker rmi $(docker images -f "dangling=true" -q)
-q 옵션을 지정하면, 이미지의 id 값만 출력한다.
dangling 값이 true인 이미지만을 삭제하는 명령이다.
Docker API 1.25 이상부터는 prune 이라는 명령어를 지원하고 있다.
prune 명령은 사용하지 않는 리소스에 대해 정리하는 역할을 한다.
사용법은 다음과 같다.
$ docker container prune
$ docker image prune
$ docker network prune
$ docker volume prune
$ docker system prune -a
-a 명령을 사용하면 dangling 이미지 이외에도 사용하지 않는 이미지까지 삭제하므로, 주의한다.