Skip to Content
Infra & DevOpsDocker 리소스 정리 및 볼륨 초기화 Tip
☁️ Infra & DevOps2019년 10월 2일

Docker 리소스 정리 및 볼륨 초기화 Tip

#docker#infra-devops#kubernetes#disk#cleanup

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 -v

4. 자동화 - 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