docker build 를 하다가 중간에 생기는 Docker 이미지들이 있다. 빌드에 성공하면 생기지 않는데 실패할 경우에 하나씩 생기며, 또는 동일한 태그로 빌드에 성공할 경우 기존에 되어 있던 태깅이 해제되며 생긴다. Dangling Image 라고 불리는 이 쓸모없는 녀석들은 Docker 작업을 빈번하게 하면 많이 생겨난다.

기능 테스트 하며 생긴 쓸모 없는 5개의 Docker Dangling Image

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
test                              latest              0fa19da6f112        35 hours ago        1.05GB
<none>                            <none>              0f590461bd53        35 hours ago        657MB
<none>                            <none>              5317290461c6        43 hours ago        618MB
<none>                            <none>              197814ec17c6        43 hours ago        618MB
<none>                            <none>              4170d50c17c6        47 hours ago        441MB
<none>                            <none>              92772bec17c6        48 hours ago        312MB
ubuntu                            bionic              94e814e2efa8        13 days ago         88.9MB
gotify/server                     latest              5ed6ad40184c        2 weeks ago         34.9MB
nginx/nginx-prometheus-exporter   0.3.0               95c4a6806905        6 weeks ago         15.2MB
gitea/gitea                       1.7                 9f2a1b9f6d26        7 weeks ago         85.6MB
photoprism/photoprism             latest              bd746a933b76        3 months ago        520MB
prom/node-exporter                latest              b3e7f67a1480        3 months ago        21MB
alpeware/chrome-headless-trunk    rev-604869          f32be082c185        4 months ago        856MB
gitea/gitea                       1.6                 a4f1704dbaad        5 months ago        77.2MB
fluent/fluentd                    v1.2                8cd78b7f671b        5 months ago        36.8MB

한 번에 지워보자!

docker images -f dangling=true | awk 'NR > 1 { print $3 }' | xargs -I{} docker rmi {}

dangling 컨테이너들의 목록만 조회한 후, IMAGE ID 만을 필터링 한 후에(awk) 각각의(xargs) 이미지를 지워주면 된다.

비슷하게 종료된 컨테이너들만 지워주는 명령은 다음처럼 할 수 있다.

docker ps -a -f status=exited | awk 'NR > 1 { print $1 }' | xargs -I{} docker rm {}

종료된 상태의 컨테이너만을 조회한 후, Container ID 만을 필터링 한 후에 각각의 컨테이너를 지워주면 된다.