# Windows의 Docker와 WSL 디스크, 레이어와 볼륨과 안전한 정리

Docker가 정리 뒤 크게 줄었다고 보고해도, C:가 같은 공간을 바로 얻지 않을 수 있습니다. 측정 중인 층이 무엇인지 확인합니다. Docker 자원은 그 환경 안에 있고, Linux 파일 시스템은 가상 디스크 안에 있을 수 있으며, Windows는 그 디스크를 파일로 봅니다. 환경 안에서 다시 쓸 수 있는 공간과, 호스트에서 풀린 용량은 다릅니다.

## 먼저 환경을 확인합니다

현재 Docker 컨텍스트와 저장소 목록을 봅니다. 이 명령은 자원을 지우지 않고 정보를 읽습니다.

```powershell
docker context show
docker system df -v
docker ps -a
docker volume ls
wsl --list --verbose
```

원격 Docker 연결은 로컬 C: 사용량이 아니라 원격 자원을 보고합니다. `DOCKER_HOST`나 `DOCKER_CONTEXT`가 설정돼 있는지도 확인합니다. [컨텍스트 문서](https://docs.docker.com/engine/manage-resources/contexts/)가 설명하듯 환경 변수가 연결 대상을 덮어쓸 수 있습니다. WSL 목록은 로컬 배포와 버전을 알려 줍니다. [Docker의 WSL 백엔드 문서](https://docs.docker.com/desktop/features/wsl/)는 데이터 배치가 설치 이력에 따라 다르다고 합니다. 모든 PC의 Docker 데이터 배포가 같다고 가정하지 마세요.

## 공유 이미지 레이어가 계산을 바꿉니다

[Docker의 디스크 사용 참고](https://docs.docker.com/reference/cli/docker/system/df/)는 공유 크기와 고유 이미지 크기를 나눕니다. 이미지는 레이어를 재사용할 수 있으므로, 하나를 지운다고 표시된 합계가 풀리지는 않을 수 있습니다. 회수 가능은 현재 참조 관계에서의 후보지이지, 내용이 필요 없다는 보장이 아닙니다.

| 자원 | 보통 담는 것 | 제거 전에 확인할 것 |
| --- | --- | --- |
| 이미지 | 런타임과 응용 프로그램 레이어 | 다시 받거나 다시 빌드할 수 있는지, 다른 컨테이너가 쓰는지 |
| 컨테이너 | 인스턴스와 쓰기 가능 레이어 | 멈춘 컨테이너에 내보내지 않은 내용이 있는지 |
| 빌드 캐시 | 재사용 가능한 빌드 결과 | 다음 빌드가 필요한 것을 받아 다시 계산할 수 있는지 |
| 볼륨 | 지속되는 데이터베이스나 업로드된 파일 | 어느 프로젝트가 소유하는지, 복구가 확인됐는지 |

두 개의 2 GB 이미지가 1.5 GB를 공유하는 예를 생각해 보세요. 하나를 지운다고 2 GB가 돌아온다는 뜻은 아닙니다. 현재 컨테이너 참조가 없는 볼륨에도 방금 멈춘 데이터베이스가 있을 수 있습니다.

## 문제가 빌드 캐시일 때 그것을 대상으로 합니다

소스, 의존성 출처, 빌드 구성이 남아 있는지 확인합니다. 캐시된 결과를 다시 만드는 것을 받아들인다면 [Docker의 builder prune 명령](https://docs.docker.com/reference/cli/docker/builder/prune/)이 빌드 캐시를 대상으로 합니다. 다음 명령은 대상이 되는 캐시를 삭제합니다. 수락하기 전에 확인 메시지를 읽고, 대화형 확인은 켜 둡니다.

```powershell
docker builder prune
```

범위는 `docker system prune`보다 좁습니다. 후자는 멈춘 컨테이너, 선택된 이미지, 네트워크도 대상으로 합니다. [추가 system prune 옵션](https://docs.docker.com/reference/cli/docker/system/prune/)은 제거를 더 넓힙니다. 모든 프로젝트에 하나의 명령을 쓰지 마세요. 빌더가 여러 개면 선택한 빌더를 확인합니다. 한 환경을 정리했다고 다른 환경도 처리된 것은 아닙니다.

## 지속 데이터는 따로 백업합니다

데이터베이스는 자체 도구로 내보내고, 격리된 환경에서 복원을 확인합니다. [Docker의 백업 안내](https://docs.docker.com/desktop/settings-and-maintenance/backup-and-restore/)는 이미지 데이터와 볼륨 데이터를 나눕니다. 이미지를 저장하거나 커밋해도 연결된 볼륨의 파일은 포함되지 않습니다. Compose 파일은 구성을 설명할 뿐 데이터베이스 내용을 담지 않습니다.

Docker Desktop 가상 디스크 전체를 백업하려면 문서화된 종료 절차를 따르고, 백엔드와 구성된 데이터 위치를 확인한 뒤 올바른 파일을 복사합니다. 바뀌는 중인 VHDX는 안정된 백업이 아닙니다. 개인 WSL 배포는 [WSL 내보내기 안내](https://learn.microsoft.com/en-us/windows/wsl/basic-commands)로 따로 백업합니다. 배포 등록을 해제하면 그 데이터가 제거됩니다. 일상적인 공간 정리 단계가 아닙니다.

<figure class="blog-diagram">
  <picture>
    <source media="(max-width: 900px)" srcset="/img/blog/windows-docker-wsl-disk-space-windows-en-mobile.webp" type="image/webp" width="768" height="1500">
    <img src="/img/blog/windows-docker-wsl-disk-space-windows-en.webp" width="1360" height="454" loading="lazy" alt="Docker 자원은 남겨 둘 필요가 다릅니다">
  </picture>
  <figcaption>참조가 없는 볼륨에도 중요한 데이터가 있을 수 있습니다. 공유 이미지 레이어는 하나를 제거했을 때 풀리는 양도 제한합니다.</figcaption>
</figure>

## Linux 층과 Windows 층을 비교합니다

자신의 배포 안에서 `df -h /`는 루트 파일 시스템 사용량을 보고, `du -h --max-depth=1 /home`은 사용자 디렉터리 증가를 찾는 데 도움이 됩니다. 두 번째 명령은 시스템 전체 합계가 아니며, 권한과 다른 디렉터리가 범위를 제한합니다. 마운트된 모든 드라이브를 돌아다니기보다 아는 큰 디렉터리부터 시작합니다.

[Microsoft의 WSL 저장소 안내](https://learn.microsoft.com/en-us/windows/wsl/disk-space)는 동적 VHD 증가를 설명합니다. Linux의 용량 상한이 Windows의 할당 사용량은 아닙니다. 삭제로 내부의 재사용 공간이 늘어도 바깥 파일이 바로 줄어들지는 않을 수 있습니다. 호스트 쪽 회수는 현재 WSL/Docker 버전과 지원되는 절차를 확인합니다. AppData의 가상 디스크를 지우거나 옮기지 말고, 용량 상한을 늘리는 것을 C:를 비우는 것으로 착각하지 마세요. 호스트 파일을 되돌리려면 먼저 배포 안에서 공간을 비운 뒤, Microsoft의 WSL 디스크 공간 안내와 Docker Desktop 자신의 디스크 이미지 설정에 따라 가상 디스크를 압축합니다. 정확한 명령은 WSL 버전과 Docker 백엔드에 따라 다르므로, 명령 하나를 복사하지 말고 버전에 맞는 단계를 사용합니다.

정리 뒤에는 `docker system df -v`를 반복하고, 남기는 서비스를 실행하며, 데이터베이스 레코드를 확인하고 원래 빌드를 끝냅니다. Docker, Linux, Windows 읽기를 따로 확인합니다. Mole의 분석 페이지는 큰 파일을 찾을 수 있습니다. 자원과 가상 디스크 관리는 소유 도구의 일입니다. 일반 패키지 캐시는 [개발 캐시 안내](/ko/windows/blog/windows-developer-caches)를 봅니다.


Canonical: https://mole.fit/ko/windows/blog/docker-wsl-disk-space-windows
