Docker를 쓰다 보면 어느 순간 맥의 저장 공간을 몽땅 잡아먹는 Docker.raw 파일을 보게 됩니다. 이미지/컨테이너/볼륨을 지워도 용량이 줄지 않는 이유, 그리고 실제로 용량을 줄이는 방법을 정리했습니다. Postgres를 쓰는 분들을 위한 체크리스트도 포함했어요.
TL;DR
- macOS의 Docker Desktop은 모든 데이터를 하나의 디스크 이미지(
Docker.raw)에 저장합니다. - 이미지/컨테이너/볼륨을 지워도 파일 자체 크기는 자동으로 줄지 않습니다.
- 공간을 줄이는 확실한 방법은 Reclaim(공간 회수) 를 실행하거나 디스크 이미지를 재생성하는 것입니다.
- DB(특히 Postgres) 데이터는 호스트 디렉토리로 분리 마운트하면
Docker.raw가 비대해지는 것을 막을 수 있습니다.
1) 왜 Docker.raw가 이렇게 커질까?
- 단일 디스크 이미지 구조: Docker Desktop은 내부 리눅스 VM의
/var/lib/docker전체를Docker.raw한 파일에 담습니다. (이미지, 컨테이너, 볼륨 포함) - 희소 파일(Sparse): 처음에는 크게 보이지만 실제 사용량은 적을 수 있습니다. 다만 사용이 늘면 실제 디스크도 커집니다.
- 자동 축소 없음: 리소스를 삭제해도 파일 자체가 줄어들지 않습니다. 내부적으로 빈 블록으로만 표시됩니다.
- DB/로그의 누적: Postgres 같은 DB 컨테이너의 데이터, WAL 로그, 애플리케이션 로그가 용량 폭증의 주범입니다.

2) 현재 상태 진단
# (A) 파일의 ‘겉보기’ 크기
ls -lh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# (B) 실제 디스크 사용량
du -sh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# (C) Docker 리소스별 사용량
docker system df
docker system df -v # 상세
docker volume ls # 로컬 볼륨 목록
# (D) (Postgres 예) 컨테이너 내부 실제 DB 데이터 크기
docker exec -it <postgres-container-id> du -sh /var/lib/postgresql/data
심볼릭 링크 주의:
Docker.raw를 외장 디스크로 옮긴 뒤 링크만 남겼다면, 링크가 아니라 실제 대상 파일 경로에서du -sh로 확인하세요. (예:/Volumes/External/DockerData/Docker.raw)
3) 공간 줄이는 방법 (권장 순서)
A. Reclaim: Docker Desktop 제공 공간 회수
데이터는 보존하면서, Docker.raw 내의 유휴 블록을 정리합니다.
docker run --privileged --pid=host docker/desktop-reclaim-space
# Apple Silicon에서 경고가 거슬리면 플랫폼 지정
# docker run --privileged --pid=host --platform=linux/amd64 docker/desktop-reclaim-space
실행 후 다시 확인:
du -sh /경로/…/Docker.raw
실제 사례: Reclaim 한 번으로 수백 GB → 수 GB까지 줄어드는 경우가 흔합니다.

B. 디스크 이미지 재생성 (가장 확실, 단 데이터 초기화)
모든 Docker 데이터(이미지/컨테이너/볼륨)를 날리고 새로 시작합니다.
1) Docker 종료 (메뉴바 아이콘 → Quit Docker)
2) Docker.raw 삭제
rm ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# 외장 디스크로 옮겨 링크 중이라면, 실제 대상 파일을 삭제
# rm /Volumes/External/DockerData/Docker.raw
3) Docker 재실행 (open -a Docker) → 새 Docker.raw 자동 생성
4) 필요 이미지/컨테이너 재배포
주의: 완전 초기화입니다. 필요한 데이터는 백업(
pg_dump,docker save, 파일 복사 등) 후 진행하세요.
C. DB 데이터는 호스트 디렉토리로 분리 (재발 방지)
DB 데이터를 Docker.raw 바깥(외장 SSD 등)에 저장하면 비대화 방지에 효과적입니다.
# docker-compose.yml (예: Postgres)
services:
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=yourpw
volumes:
- /Volumes/External/PostgresData:/var/lib/postgresql/data # ← 호스트 경로 바인드
ports:
- "5432:5432"
- 장점: DB 용량이 늘어도
Docker.raw는 그대로. - 팁: 외장 디스크를 쓴다면 항상 마운트 경로가 동일해야 합니다.
4) (중요) Postgres 용량 다이어트 체크리스트
Postgres를 쓰면
Docker.raw가 급격히 커지는 일이 많습니다.
- VACUUM / VACUUM FULL
VACUUM FULL은 테이블 잠금을 수반합니다. 다운타임이 부담스럽다면 pg_repack 등 대안 검토.
VACUUM (VERBOSE); -- 테이블/DB 폭증 시 잠깐 서비스 중단 허용 가능하면 VACUUM FULL;- WAL 관리
CHECKPOINT;실행으로 불필요 WAL 처리 가속- 아카이빙/보관 정책 점검 (
archive_mode,archive_command)
- Autovacuum 튜닝
- 대량 UPDATE/DELETE가 많은 테이블은 autovacuum 파라미터 조정 검토
- 로그/임시파일
- 장기 보관 로그/임시파일이 볼륨을 잠식하는지 확인
정리 후에도 Docker.raw는 자동 축소되지 않으므로, A(Reclaim) 또는 B(재생성) 으로 실제 파일 크기를 줄여야 합니다.
5) 외장 디스크로 Docker.raw 옮기기 (선택)
내장 SSD 부담을 줄이고 싶다면:
# 0) Docker 종료 (Quit Docker)
# 1) 새 위치 준비
mkdir -p /Volumes/External/DockerData
# 2) 파일 이동
mv ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw \
/Volumes/External/DockerData/
# 3) 심볼릭 링크 생성
ln -s /Volumes/External/DockerData/Docker.raw \
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# 4) Docker 재실행
이후부터는 외장 디스크 용량만 소모됩니다.
du -sh는 실제 파일 경로에서 확인하세요.
6) 자주 묻는 질문(FAQ)
- Q.
WARNING: platform amd64 != host arm64경고가 떠요.
A. Apple Silicon 맥에서 reclaim 이미지를 쓸 때 나는 일반적인 경고입니다. 기능엔 문제 없습니다. 조용히 돌리고 싶으면--platform=linux/amd64를 지정하세요. - Q.
Docker.raw기본 위치는 어디인가요?
A.~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw(구버전은Docker.qcow2) - Q. 이미지/컨테이너를 지웠는데 왜 파일이 안 줄죠?
A.Docker.raw는 자동 축소되지 않습니다. Reclaim하거나 재생성해야 실제 파일 크기가 줄어듭니다. - Q. VM 내부의 실제 경로는요?
A./var/lib/docker아래에 저장됩니다. macOS에서는 디스크 이미지(Docker.raw)로 캡슐화되어 접근합니다.
7) 운영 체크리스트 (복붙용)
# 상태 점검
ls -lh /…/Docker.raw
du -sh /…/Docker.raw
# Docker 리소스 점검
docker system df
docker system df -v
# 공간 회수 (월 1회 추천)
docker run --privileged --pid=host --platform=linux/amd64 docker/desktop-reclaim-space
# 정말 안 쓰는 리소스 전부 정리 (⚠️ 신중하게)
docker system prune -a --volumes
8) 실전 예시 (전/후)
- Before:
Docker.raw228 GB (실제 디스크 점유) - Reclaim 실행:
docker/desktop-reclaim-space - After:
Docker.raw6.3 GB
컨테이너/이미지 자체의 사용량은 작았지만, 과거 이력 때문에 Docker.raw가 비대해진 전형적인 사례입니다.
결론
- 용량이 갑자기 부족해졌다면
Docker.raw부터 확인하세요. - 데이터 보존이 필요하면 Reclaim, 완전 초기화가 가능하면 재생성으로 가장 빠르게 해결됩니다.
- DB는 호스트 디렉토리로 분리 마운트하여 재발을 막는 것이 최선입니다.
이 글이 도움이 되셨다면, 팀 위키/개인 블로그에 그대로 가져다 쓰세요. 상황에 맞게 경로만 바꾸면 됩니다. 👍
'초짜 IT보이 서바이벌 스토리 > DevOps' 카테고리의 다른 글
| DevOps Capabilities — 2017년부터 2025년까지 (0) | 2025.09.05 |
|---|---|
| DevOps Capabilities - A Reflection from 2017 to 2025 (0) | 2025.09.03 |
| #Tomcat 9, #Spring 3.x.x #호환 #문제 (0) | 2025.04.23 |
| #Jenkins #Pipeline - #Slack #Notification #설정 및 #sample (0) | 2025.02.11 |
| Tool 개발 로그 - 1-3 #Jenkins #서비스 #재시작 + @작업하는 #Tool 만들기 c# - 프로그램 작성 ( FolderControlCore ) (61) | 2023.06.20 |