WindowsでDockerの容量を減らす方法|停止コンテナ・ボリューム・VHDX圧縮まで

Docker の不要データを削除する方法まとめ
未来WindowsのDocker DesktopでPC容量が圧迫されていませんか?
SAKASA今日はPC掃除の日です
目次
見えるフォルダは“ただの共有フォルダ”だけ
Dockerの構造は少し特殊です。
Documents や Desktop は Docker にとっては単なる“表向きの顔”。
実際の仕事場(コンテナやイメージ)は、目に見えない奥のに隠れています。
例えば、自分が編集できる作業フォルダ
Documents/my-kohya-templateDocuments/my-projectDesktop/project-data
これらは、Docker にとっては ただのマウント先(共有フォルダ) にすぎず、
Docker の本体ではないのです。
コンテナの本体の場所
Docker の本体は、全部 “見えない場所” にある。
C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\data\ext4.vhdx など奥の奥に。
そして、この仮想ディスクの中に、
- コンテナ本体のファイルシステム
- Docker イメージ
- ボリュームのデータ
- レイヤー(差分)
- キャッシュ
などが全部詰まっているのです。
だから、作業フォルダを消しても→ コンテナは動きます!?(ただし必要なデータがなくなる)
誤解しやすいDockerのポイント
① コンテナ本体は作業フォルダではない
Documents内に、my-kohya-template があったとしても
コンテナの中には別の完全な Linux ファイルシステムが存在する。
② マウントしていない部分は完全に見えない
コンテナの OS(Ubuntu 等)の中身は全部 ext4.vhdx にあります。
③ コンテナ削除しても作業フォルダは消えない
Windows に Docker Desktop を入れた場合、
実体は Docker の内部ストレージ(仮想ディスク)に入る。
▼ 本当の場所はこんなところ
C:\Users\<ユーザー名>\AppData\Local\Docker\wsl\data\ext4.vhdxこれは、巨大な仮想ディスク(VHDX)ファイルで
その中に「止まったコンテナ」「起動中のコンテナ」「イメージ」「ボリューム」が全部まとめて入っています。
でも・・・
- エクスプローラから“コンテナのフォルダ”を見ることはできない
- 内容を個別に削除もできない
- Docker コマンドでしか操作できない
という仕組みになっています。
Docker Desktopの実態
Docker Desktop は Windows 上で動いているように見えて、
中身は WSL2 の Linux 仮想マシンの中で動いているからです。
※WSL2 = Windows Subsystem for Linux 2
→ Windows 上で Linux をほぼネイティブに動かせる仕組み 。
PC → WSL2 (仮想Linux) → Docker
という二重構造になっている。
コンテナはすべてその中に閉じ込められているので、
Windows 側から直接、触ることはできません。
“停止中” コンテナが溜まってPCの容量を圧迫してくる
Windows 側から直接、触ることが出来ないのにもかかわらず、Docker は以下の場合にコンテナを停止状態で残します。
docker run→ コマンド終わる → そのコンテナが停止状態で残る- テンプレテストなどに複数起動したあと閉じただけ
- エラーで落ちた
- キャンセルした
これらすべてが自動削除されません。だからどんどん溜まっていきます。

Docker は “使っていなくても” どんどん容量が増える
Docker Desktop 以下の理由で肥大化していきます
① イメージ(image)が数GBずつ増える
1イメージで 3〜8GB とか普通。
気づかないうちに 複数イメージ → 合計 数十GB になっている。
② コンテナ(container)の残骸が残る
1つ 1〜5GB。
停止していてもディスクを占有する。
③ ボリューム(volume)が肥大化する
これが最も大きい。
削除されずゴミが永遠に溜まる → 10GB〜100GBになることもある
今すぐ Docker の容量を確認する方法(超簡単)
PowerShell を 管理者で開いて これを実行
docker system df- Images(イメージ)
- Containers(コンテナ)
- Volumes(ボリューム)
の使用容量がすべて出ます。
docker ps -a以下を実行すると、各コンテナに NAMES(名前) が表示されます。
たとえば・・・
my-kohya-template
kohya_container
my_dev_env
など、自分で名前をつけた使用中コンテナは残す(作業中)。
逆に・・・
frosty_banach
wonderful_jackson
adoring_shockley
このような、ランダム英語名は Docker が勝手に作った一時的な残骸 です。
安全にコンテナとボリュームを掃除する方法(状況別)
「Docker本体が大きい」だけなら…
Docker Desktop 本体だけで・・・
- アプリ本体:2.5GB
- WSL2用データ:4〜6GB
- 内部キャッシュ:数GB
合計 10〜15GB は確実に使う
「最近入れたばかり」でも、原因には十分なり得る。
Docker の不要データを削除する方法(ローカルだけ)
PowerShell または CMD で実行します
▼ 本当にいらないもの全部削除
docker system prune -a- 停止中コンテナ
- 使ってないイメージ
- ネットワーク
- キャッシュ
全部削除 → 10〜40GB返ってくる!
-a(または --all)オプション
意味:「すべての未使用イメージも削除する」
注意:使っているコンテナのイメージも消える。
▼ 停止中コンテナを削除
docker container prune -f「停止したコンテナ」を全部削除する時
→ 容量が 1〜5GB 返ってくることが多い
※ 実行しても現在動いているコンテナは影響なし
▼使っていないイメージ削除(必要なものはないので全部OK)
docker image prune -a -f▼ ボリューム削除(これが一番容量が戻る)
docker volume prune -fどのコンテナにも使われていない “孤立したボリューム” を削除
→ 1〜50GB 返ってくる可能性あり
※ 現在使用中のボリュームは消えないので安全
▼ネットワークも整理したい場合(任意)
docker network prune -fこれで Docker が使っている実データはほぼ消えます。
圧縮手順(管理者で PowerShell を実行)
Docker Desktop を終了する
圧縮する前に必ず Docker Desktop を終了 してください。
タスクトレイ → 右クリック → Quit Docker Desktop
ext4.vhdx の場所を探す方法
PowerShell で次を実行
dir -Recurse -Filter ext4.vhdx $env:LOCALAPPDATAこれで C:\Users\Owner\AppData\Local\ 以下を
全部検索して ext4.vhdx の実際の場所が表示されます。
例: 見つかった場所が
C:\Users\Owner\AppData\Local\DockerDesktop\wsl\data\ext4.vhdxだった場合
STEP
WSL を完全停止
wsl --shutdownSTEP
diskpart を起動
diskpartSTEP
diskpart 内で
select vdisk file="C:\Users\Owner\AppData\Local\DockerDesktop\wsl\data\ext4.vhdx"このファイルが Docker の全データ です。
STEP
読み取り専用でアタッチ
attach vdisk readonlySTEP
圧縮(容量が小さくする)
compact vdiskSTEP
デタッチ
detach vdiskSTEP
diskpart を終了
exit注意点
必ず Docker Desktop は終了してから実行
(Quit Docker Desktop → マークが灰色になるまで待つ)
途中で「使用中です」と出たら Docker がまだ動いています

