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

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

Docker の不要データを削除する方法まとめ

未来

WindowsのDocker DesktopでPC容量が圧迫されていませんか?

SAKASA

今日はPC掃除の日です

目次

見えるフォルダは“ただの共有フォルダ”だけ

Dockerの構造は少し特殊です。

Documents や Desktop は Docker にとっては単なる“表向きの顔”
実際の仕事場(コンテナやイメージ)は、目に見えない奥のに隠れています。

例えば、自分が編集できる作業フォルダ

  • Documents/my-kohya-template
  • Documents/my-project
  • Desktop/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 は “使っていなくても” どんどん容量が増える

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 --shutdown
STEP
diskpart を起動
diskpart
STEP
diskpart 内で
select vdisk file="C:\Users\Owner\AppData\Local\DockerDesktop\wsl\data\ext4.vhdx"

このファイルが Docker の全データ です。

STEP
読み取り専用でアタッチ
attach vdisk readonly
STEP
圧縮(容量が小さくする)
compact vdisk
STEP
デタッチ
detach vdisk
STEP
diskpart を終了
exit
注意点

必ず Docker Desktop は終了してから実行
(Quit Docker Desktop → マークが灰色になるまで待つ)

途中で「使用中です」と出たら Docker がまだ動いています

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次