Quick Flow
# 삭제 대상은 명령 전 목록으로 확인한다.
docker system df -v
docker ps -a
docker image ls --filter dangling=true
docker volume ls
# 확인 프롬프트를 읽고 미사용 리소스를 정리한다.
docker system prunedocker system prune에는 --dry-run이 없습니다. 볼륨은 기본으로 제외되며, --volumes는 사용되지 않는 anonymous volume만 정리합니다. named volume은 docker volume prune을 별도로 검토합니다.
정리 범위
docker system prune이 dangling 리소스를 정리하는 방식
docker system prune은 중지된 컨테이너, 태그 없는 이미지(dangling), 사용되지 않는 네트워크, 빌드 캐시를 한 번에 제거한다. 실행 중인 컨테이너와 사용 중인 이미지, 볼륨은 건드리지 않는다. -f 플래그로 확인 프롬프트를 생략할 수 있다.
# 정리 전 현황 확인
docker system df
# 실제 정리 실행
docker system prune
# 확인 없이 바로 정리 (CI 환경에서 유용)
docker system prune -fdangling image가 쌓이는 이유
같은 이름과 태그로 이미지를 다시 빌드하면 새 이미지가 해당 태그를 가져가고 기존 이미지는 태그를 잃는다. 태그 없이 다이제스트만 남은 이미지를 dangling image라고 한다. 빌드를 반복할수록 계속 쌓이며, docker image ls에서 <none>:<none>으로 표시된다.
# dangling image 목록 확인
docker image ls --filter dangling=true
# dangling image만 정리
docker image prune
# 빌드를 반복하면 쌓이는 <none>:<none> 이미지 예시
# REPOSITORY TAG IMAGE ID SIZE
# <none> <none> abc123... 450MB
# <none> <none> def456... 448MBvolume이 --volumes 없이 prune되지 않는 이유
볼륨에는 DB 데이터, 업로드 파일 같은 영속 데이터가 담길 수 있다. docker system prune이 기본적으로 볼륨을 건드리지 않는 것은 의도적인 데이터 보호 설계다. --volumes는 사용되지 않는 anonymous volume을 정리한다. 이름을 붙인 volume까지 포함한 미사용 local volume 정리는 docker volume prune의 별도 범위이므로, 명령을 섞어 같은 대상으로 생각하지 않는다.
# 볼륨 사용 현황 확인
docker volume ls
# 볼륨 제외하고 정리 (기본)
docker system prune
# 볼륨까지 포함해 정리 (데이터 손실 주의)
docker system prune --volumes
# 사용되지 않는 local volume 정리 - named volume도 대상일 수 있음
docker volume prune디스크 사용량을 확인하고 정리 대상을 판단하는 방법
정리하기 전에 docker system df로 각 유형별 사용량을 확인한다. 어떤 유형이 디스크를 많이 차지하는지 파악하고, 필요한 대상만 선택적으로 정리하는 것이 안전하다.
# 유형별 디스크 사용량
docker system df
# 상세 내역 (이미지, 컨테이너, 볼륨별 목록)
docker system df -v
# 종류별 개별 정리
docker container prune # 중지된 컨테이너만
docker image prune # dangling 이미지만
docker network prune # 미사용 네트워크만
docker volume prune # 미사용 볼륨만 (주의)
docker builder prune # 빌드 캐시만system prune과 개별 prune은 "정리 범위"가 다르다
빠르게 전체를 비우고 싶다면 docker system prune이 편하지만, 어떤 리소스를 없앨지 정확히 알고 있을 때는 개별 prune이 더 안전합니다. 특히 볼륨과 빌드 캐시는 실수 비용이 커서, 전체 prune보다 범위를 좁혀 정리하는 편이 운영에서는 낫습니다.
데이터 보존
정리 명령은 삭제 후보를 실행 전에 목록으로 확인해야 합니다. docker system prune --volumes는 사용되지 않는 anonymous volume을 포함하고, docker volume prune은 사용되지 않는 named volume까지 대상으로 삼을 수 있습니다. 데이터베이스 볼륨의 보관 책임은 컨테이너 상태가 아니라 백업 정책에 있습니다.
참고 링크
1 sources