데이터를 잃지 않고 Mac Docker 정리하기
Docker Desktop은 이미지, 쓰기가 가능한 컨테이너 레이어, 빌드 캐시, 볼륨이 Linux 가상 디스크 안에 있기 때문에 수십 기가바이트를 차지할 수 있습니다. 이 범주들은 모두 같은 방식으로 버려도 되는 것은 아닙니다. 빌드 캐시는 보통 다시 만들 수 있지만, 데이터베이스 볼륨은 중요한 데이터의 유일한 복사본일 수 있습니다. 안전한 정리는 가장 넓은 prune 명령이 아니라 Docker의 현황 파악부터 시작합니다.
Docker가 차지한 공간이 돌아오지 않는 이유
macOS의 Docker Desktop은 Linux VM을 실행하며, 데이터는 보통 Docker.raw라는 스파스(sparse) 가상 디스크에 저장합니다. Docker의
Mac 저장 위치 안내
는 위치, 디스크 한도, 실제 사용 공간을 Docker Desktop > Settings > Resources > Advanced에서 확인하라고 안내합니다. 이 파일은 Finder가 아니라 그 설정으로 옮기세요. 스파스 파일은 논리적 최대 크기와 그보다 작은 실제 할당량을 가지므로, ls -lh만 보면 현재 차지하는 용량보다 훨씬 커 보일 수 있습니다.
Docker 자신이 얼마나 쓰고 있다고 보는지 확인하세요:
docker system df -v
상세 보기는 이미지, 컨테이너, 로컬 볼륨, 빌드 캐시를 나눕니다. "Reclaimable"은 Docker가 그 객체를 필요로 하는 현재 참조를 찾지 못했다는 뜻일 뿐, 중지된 컨테이너·옛 이미지·볼륨을 내일 쓰지 않을 것이라는 증거가 아닙니다. prune 전에 docker ps -a와 docker volume ls도 함께 확인하세요.
좁은 범위의 정리부터 시작하세요
항상 Docker 안에서 공간을 회수하고, 가상 디스크 파일을 직접 지우지 마세요. 이해하는 범주부터 시작하세요:
docker builder prune --filter until=168h
docker image prune
docker container prune
첫 명령은 7일이 지난 빌드 캐시를 제거합니다. 작업 방식에 맞게 기간을 조정하세요. 다음 두 명령은 dangling 이미지와 중지된 컨테이너를 제거하기 전에 확인을 묻습니다. 각 단계 후 docker system df -v를 다시 실행해 어떤 조치가 효과가 있었는지 확인하세요.
Docker의 정리(prune) 가이드는 docker system prune을 더 넓은 편의 명령으로 설명합니다. -a를 붙이면 dangling 레이어뿐 아니라 사용하지 않는 모든 이미지를 제거합니다. --volumes를 붙이면 사용하지 않는 익명 볼륨까지 범위가 넓어지며, 여기에 데이터베이스 파일이나 다른 상태가 들어 있을 수 있습니다. docker system prune -a --volumes를 기본 정리 명령으로 쓰지 마세요. 볼륨을 prune하기 전에 이름과 소유 관계를 확인하세요:
docker volume ls
docker volume inspect <volume-name>
Compose가 만든 볼륨에는 보통 프로젝트와 서비스 레이블이 붙습니다. 소유 프로젝트를 확인한 뒤, 다시 만들 수 없는 데이터는 볼륨을 제거하기 전에 내보내거나 백업하세요.
디스크 이미지 자체를 회수하기
Docker.raw를 Finder에서 지워서는 공간을 안전하게 되찾을 수 없습니다. 이 파일은 Linux VM의 디스크 전체이므로 Finder나 rm으로 지우면 빈 공간만이 아니라 그 안의 이미지, 컨테이너, 볼륨이 모두 사라지고, Docker는 다음 실행 때 빈 디스크를 새로 만듭니다. 공간은 Docker 안에서 회수하세요. prune한 뒤 스파스 디스크가 블록을 돌려주도록 두고, 디스크 이미지 위치와 한도는 Settings에서 조정합니다. 보이는 큰 숫자는 대개 스파스 파일의 논리적 최대 크기이지 실제로 쓰는 물리 공간이 아니므로, 전부 회수할 수 있다고 보기 전에 실제 할당량을 측정하세요.
prune 후에도 여유 블록은 먼저 Linux 파일시스템 안에 생기고, macOS가 스파스 디스크에서 그 공간을 돌려받는 것은 그다음입니다. 현재 Docker 문서에 따르면 Docker.raw 이미지는 보통 수 초 안에 호스트에 반환 가능한 공간을 돌려줍니다. 예전 Docker.qcow2 이미지는 수분 걸릴 수 있는 백그라운드 과정을 씁니다. 파일의 논리적 최대 크기로 판단하지 말고 실제 디스크 사용량을 다시 측정하세요. 공장 초기화는 압축이 아닙니다. 로컬 컨테이너, 이미지, 볼륨, 설정을 모두 지웁니다. 그 전체 손실이 의도된 경우, 그리고 중요한 볼륨 데이터를 이미 내보낸 경우에만 사용하세요.
내부 구조: 파일이 커지고 줄어들지 않는 이유
Docker Desktop은 Linux VM을 실행하며 Docker.raw는 그 VM의 가상 디스크입니다. VM에서 데이터를 쓸수록 실제 사용량이 커지는 스파스 파일입니다. VM 안에서 이미지를 삭제하는 것과 macOS에 공간이 반환되는 것은 별도 단계입니다. TRIM/discard와 Docker Desktop의 공간 회수 처리가 필요하며, 시점은 버전과 디스크 이미지 형식에 따라 달라집니다. 따라서 Docker의 논리적 사용량과 macOS의 실제 디스크 사용량을 따로 측정하세요. Docker.raw 자체를 삭제하면 그 안에 저장된 이미지, 컨테이너, 볼륨 데이터가 사라지며, 호스트에 별도로 보관한 파일까지 삭제되는 것은 아닙니다.
디스크 맵이 도움이 되는 경우
Mole의 Analyze 같은 디스크 맵은 가상 디스크와 그 실제 점유를 보여 줄 수 있습니다. 어떤 내부 객체가 참조 중인지는 Docker 자체 CLI가 판단해야 합니다. 두 관점은 다른 질문에 답합니다. macOS는 용량이 어디에 할당되었는지를 보여 주고, Docker는 그 할당 안에 무엇이 있는지를 설명합니다.
안전한 작업 순서
docker system df -v를 실행하고, 오래된 프로젝트와 상태를 담은 볼륨을 확인한 뒤, 고유 데이터를 내보내고, 한 범주씩 prune하세요. Docker 내부 합계와 macOS 실제 용량을 모두 다시 확인하세요. 넓은 prune 플래그는 범위가 어떻게 넓어지는지 검토한 뒤에만 쓰고, 공장 초기화를 일상적인 공간 확보 단축키로 쓰지 마세요. 가장 빠르고 안전한 이득은 보통 알 수 없는 볼륨이 아니라 오래된 빌드 캐시에서 옵니다.