← 전체 글로 돌아가기

Docker

작은 VPS에서 디스크가 찼을 때 Docker 정리 순서를 정한 체크리스트

무작정 docker system prune을 실행하기 전, 실제 점유 위치와 복구 가능한 정리 순서를 적은 체크리스트.

새 배포가 갑자기 실패한 밤

2GB VPS에서 컨테이너를 재배포하려는데 no space left on device가 나왔다. 처음에는 오래된 이미지가 전부라고 생각했다. 하지만 df만 보고 docker system prune -a를 실행하면, 다음 롤백에 필요한 이미지까지 지울 수 있어 순서를 정했다.

1. 먼저 어느 파일시스템이 찼는지 확인

df -h
docker system df
sudo du -xhd1 /var/lib/docker | sort -h

df -h/ 사용량과 Docker 요약을 함께 봤다. 한 번은 이미지가 아니라 /var/log의 압축되지 않은 애플리케이션 로그가 대부분이었다. 그래서 Docker 명령을 실행하기 전 du 결과를 기록해 두는 습관이 생겼다.

2. 안전한 것부터 비운다

실행 중인 컨테이너와 볼륨은 건드리지 않는 순서다.

docker container prune
docker image prune
docker builder prune

각 명령은 삭제 목록을 보여 주므로 확인하고 진행한다. docker image prune -adocker volume prune은 훨씬 공격적이다. 특히 데이터베이스를 named volume으로 운영한다면 마지막 명령을 습관처럼 실행하면 안 된다.

3. 재발 방지는 용량 알림으로

서버가 꽉 찬 뒤에 알게 되는 것보다 80%에서 알림을 받는 편이 낫다. 간단한 크론 점검도 시작점이 될 수 있다.

#!/bin/sh
used=$(df -P / | awk 'NR==2 {gsub("%", "", $5); print $5}')
[ "$used" -ge 80 ] && logger -t disk-watch "root disk is ${used}% full"

체크리스트

  • df -h로 대상 마운트를 확인했다.
  • Docker와 로그 디렉터리의 실제 크기를 비교했다.
  • 삭제 전 롤백 이미지와 데이터 볼륨의 필요성을 확인했다.
  • 정리 후 docker system df와 배포를 다시 검증했다.
  • 용량 임계치 알림 또는 로그 로테이션을 설정했다.

공간 부족은 정리 명령 하나의 문제가 아니었다. 무엇이 늘어나는지 먼저 보는 것이 데이터와 롤백 여지를 함께 지키는 방법이었다.