본문 바로가기
개발

서버 디스크가 꽉 찼을 때 — 도커 이미지부터 정리하자

by 요즘IT 2026. 9. 23.

배포가 갑자기 안 됩니다.

에러 메시지엔 딱 한 줄. no space left on device. 디스크가 꽉 찼다는 거죠. 서버는 74GB짜린데, 어느새 99%가 차 있었습니다.

근데 이상하죠. 나는 큰 파일을 올린 적도 없는데 뭐가 이렇게 먹었지?

범인은 대부분 도커입니다.

도커는 "안 버리는 사람"이다

도커(Docker, 프로그램을 상자 단위로 격리해서 돌리는 기술)를 창고에 비유해볼게요.

배포할 때마다 도커는 새 상자(이미지)를 하나 만듭니다. 문제는, 옛날 상자를 안 버린다는 거예요. 100번 배포하면 100개가 창고에 쌓입니다. 옛날 버전은 이제 안 쓰는데도 그대로 남아 있어요.

저는 젠킨스로 자동 배포를 돌리고 있었는데, 빌드할 때마다 이미지가 하나씩 쌓였습니다. math-playground:1부터 :147까지. 147개요. 이것만 60GB가 넘었습니다.

한마디로, 이사할 때 안 쓰는 짐을 안 버리고 계속 쌓아둔 창고였던 거죠.

docker system df
docker system df

뭐가 자리를 먹는지부터 본다

무작정 지우면 안 됩니다. 뭐가 먹는지부터 봐야죠. 이 명령 하나면 됩니다.

docker system df

이미지, 컨테이너, 볼륨이 각각 얼마나 쓰는지, 그중 버려도 되는 게(RECLAIMABLE) 얼마인지 딱 나옵니다. 여기서 이미지 쪽 숫자가 크면, 범인은 확정입니다.

안전하게 비우는 순서

정리는 순서가 중요합니다. 저는 이렇게 했어요.

먼저 멈춰 있는 컨테이너를 치웁니다.

docker container prune -f

그다음, 아무 컨테이너도 안 쓰는 이미지를 통째로 지웁니다.

docker image prune -a -f

이 두 줄로 40GB 넘게 비웠습니다. 지금 돌아가는 서비스는 건드리지 않고, 안 쓰는 옛날 상자만 골라 버린 거예요.

여기서 절대 하지 말 것

이게 제일 중요합니다. 인터넷에 흔히 나오는 이 명령, 함부로 치지 마세요.

docker system prune --volumes

--volumes가 붙는 순간, 데이터베이스 데이터까지 날아갈 수 있습니다.

도커에서 볼륨(volume)은 "상자가 사라져도 남아야 하는 진짜 데이터"가 사는 곳이에요. DB 내용이 여기 있습니다. 이미지는 다시 빌드하면 되지만, 볼륨은 지우면 끝입니다. 복구 안 돼요.

저도 이 명령을 칠 뻔했다가 멈칫했습니다. 솔직히 등골이 서늘했어요. 이미지 정리와 볼륨 삭제는 완전히 다른 얘기입니다. 헷갈리면 그냥 --volumes는 평생 안 친다고 생각하세요.

마무리

디스크가 차는 건 사고가 아니라 예고된 일입니다. 자동 배포를 돌리는 한, 이미지는 계속 쌓이거든요.

그래서 저는 아예 예약 작업(cron)으로 매주 한 번 안 쓰는 이미지를 자동으로 비우게 걸어뒀습니다. 사람이 기억할 필요 없게요.

한마디로, 도커 이미지는 청소 안 하면 반드시 디스크를 채웁니다. 지금 서버가 있다면 docker system df 한 번 쳐보세요. RECLAIMABLE 숫자가 수십 GB로 찍히면, 그게 지금 당신 서버가 조용히 차오르고 있다는 신호입니다.