Docker 리소스 정리 및 볼륨 초기화 Tip
1. 로컬 디스크가 꽉 차는 이유
Docker를 통해 수많은 테스트 컨테이너를 띄우고 지우기를 반복하다 보면, 어느새 호스트의 루트 디스크(/var/lib/docker) 공간이 꽉 차는 스토리지 병목 현상을 겪게 됩니다. 특히 다음과 같은 상황에서 디스크가 급속도로 차오릅니다.
- CI/CD 빌드 파이프라인: Jenkins나 GitLab Runner에서 매 빌드마다 새 이미지를 만들고 이전 이미지를 제거하지 않으면, 이미지 레이어와 캐시가 순식간에 수십 GB를 차지합니다.
- 개발 환경 반복 테스트:
docker-compose up/down을 반복하면서 볼륨이 고아(Dangling) 상태로 남습니다. - K8s 워커 노드: 노드에는 이미 폐기된 파드(Pod)의 이미지들이
gc.imagefs.available임계치를 초과할 경우에만 자동 수거되므로, 그 전까지는 수동으로 정리해야 합니다.
2. 핵심 청소 명령어 모음
① 사용하지 않는 이미지 일괄 삭제
bash
# Dangling 이미지(태그 없는 <none> 이미지)만 삭제
$ docker image prune
# 현재 실행 중인 컨테이너에서 사용하지 않는 이미지 전부 삭제 (더 강력!)
$ docker image prune -a주의:
-a옵션은 현재 컨테이너에서 사용 중이지 않은 모든 이미지를 삭제합니다. 로컬에 풀(pull)해두었지만 현재 올려놓지 않은 이미지까지 날아갈 수 있으니 신중하게 사용하세요.
② 사용하지 않는 볼륨(Dangling Volume) 일괄 삭제
컨테이너는 제거되었는데 마운트되었던 볼륨(데이터)만 고아(Dangling) 상태로 남아 용량을 차지할 때 유용합니다.
bash
# Dangling 볼륨 목록 확인
$ docker volume ls -f dangling=true
# Dangling 볼륨 일괄 삭제
$ docker volume ls -qf dangling=true | xargs -r docker volume rm
# 또는 간결하게
$ docker volume prune③ 한 번에 모든 잉여 리소스 정리 (docker system prune)
중지된 컨테이너, 사용되지 않는 네트워크, Dangling 이미지, Dangling 빌드 캐시 등을 모두 찾아 일괄 삭제합니다.
bash
# 기본 (Dangling 리소스 정리)
$ docker system prune
# 볼륨까지 포함하여 정리 (더 많은 공간 확보)
$ docker system prune --volumes
# 확인 프롬프트 없이 강제 실행 (자동화 스크립트용)
$ docker system prune -f주의: 명령어 수행 전에 혹시라도 필요에 의해 중지(Stopped) 상태로 유지해둔 컨테이너가 있다면 같이 삭제될 수 있으니 주의 바랍니다.
3. 현재 Docker 디스크 사용량 확인
그 전에 먼저 어떤 리소스가 얼마나 공간을 차지하고 있는지 파악하는 것이 중요합니다.
bash
# Docker 리소스별 디스크 사용량 분석 (이미지/컨테이너/볼륨/빌드캐시)
$ docker system df
# 더 상세한 정보 (각 항목별 이름, ID, 크기 등)
$ docker system df -v4. 자동화 - Crontab에 주기적 정리 등록
CI 빌드 서버나 K8s 워커 노드에서는 수동 관리보다 crontab에 주기적인 정리 작업을 등록해두면 훨씬 안정적입니다.
bash
# crontab -e 편집
# 매일 새벽 3시에 dangling 이미지와 중지 컨테이너 자동 정리
0 3 * * * /usr/bin/docker system prune -f >> /var/log/docker-cleanup.log 2>&1이처럼 docker system prune 계열의 명령어들의 동작을 정확히 이해하고 상황에 맞게 주기적으로 실행하면, 디스크 용량 부족으로 인한 빌드 실패나 파드 스케줄링 실패(노드 디스크 압박) 이슈를 사전에 방지할 수 있습니다.
Last updated on