WSL2とDockerを使ってシステム開発をしていると
どうしても容量をどんどん圧迫していきます。
私のPCも開発をしている途中で、容量が無くなって発狂しそうになってました。
(実際は発狂した)
しかもWSL2内のファイルを削除しても、容量は変わらない。
そんな時にとった解決方法を備忘録的に残しておきます。
私の環境 : Windows11 Home
本記事の内容を実施前に復旧方法を確認した後、自己責任で実施お願いします。
このブログを読んでくださる人には、困ってほしくないため
実施前にどうしたら、元の状態に戻れるかなど確認してからの実施をお願い致します。
Docker 環境をクリーンアップ
PCの容量が減っているなと感じたら、Doker環境を整理をすると良い場合が多いです。
ケースバイケースでクリーンアップの内容は変わるのですが、主に2通りのクリーンアップ方法があります。
①システム上のすべてのDockerボリュームを削除できる場合(削除容量:大)
②未使用のリソースのみを削除する場合(削除容量:小)
この2通りの方法を説明します。
システム上のすべてのDockerボリュームを削除できる場合
以下のコマンドをWSL2のプロンプト上で実行することで、すべてのDockerボリュームを削除されます。
つまりPCのストレージ容量を空けることができます。
docker stop $(docker ps -aq)
docker rm $(docker ps -aq)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -q)
基本的にはコピペしてもらって、エンターボタンで実行できます!
とは言ってもどういコードなんだと疑問もあるかもなので
1つ1つどういうコマンドか解説していきます。
1. docker stop $(docker ps -aq)
説明:
docker ps -aq
: 現在存在しているすべてのコンテナのIDをリスト表示します(-a
はすべてのコンテナ、-q
はIDのみを出力)。docker stop
: 指定されたコンテナを停止します。
「すべてのコンテナ(実行中のものも停止中のものも含む)を停止する」ために実行。
コンテナを削除するための停止です。
参考
https://docs.docker.com/reference/cli/docker/container/stop/
2. docker rm $(docker ps -aq)
説明:
docker rm
: 指定されたコンテナを削除します。$(docker ps -aq)
: 前述の通り、すべてのコンテナのIDリストです。
「停止されたすべてのコンテナを削除する」ここでコンテナを削除。
3. docker rmi $(docker images -q)
説明:
docker images -q
: すべてのイメージのIDをリスト表示します。docker rmi
: 指定されたイメージを削除します。
「現在のシステム上のすべてのDockerイメージを削除する」ことを実行してます。
4. docker volume rm $(docker volume ls -q)
説明:
docker volume ls -q
: すべてのボリュームの名前をリスト表示します。docker volume rm
: 指定されたボリュームを削除します。
このコマンドは、「システム上のすべてのDockerボリュームを削除する」ことを意味します。
コンテナが再起動や削除されても、ボリュームに保存されたデータは保持されます。
なので容量を空けるために、ボリュームを削除します。
参考
https://docs.docker.com/reference/cli/docker/volume/rm/
未使用のリソースのみを削除する場合
開発やテスト中の一時的なリソースを整理したい場合や、本番環境に影響を与えずにクリーンアップを行いたい場合は、未使用リソースのみを削除したいと思います。
そんなときは以下のコマンドを使用します。
docker system prune
以上がDocker 環境のクリーンアップ方法です。
これで再度必要なDokerを起動して、空き容量が増えていれば大成功です!!
ここまでやってさらに容量を空けたい場合、以下の仮想ハードディスクの最適化を実施します。
diskpartによる仮想ハードディスク(VHDX)を最適化
WSL2ではLinuxのファイルシステムやデータを格納するために、仮想ディスクイメージファイルを作成します。
そのためWSL2側で(仮想ディスク上で)ファイルを削除しても、windowsから見ると使用しているとみなしているので、PCの容量が空かないのです。
PCの容量を空けるにはWindows Powershellを管理者で実行して空いたスペースを削除する必要があります。
wsl --shutdown
diskpart
select vdisk file="C:\Users\{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx"
attach vdisk readonly"
compact vdisk
detach vdisk
*注意:コピペしてもそのまま使えません。
select vdisk file=”C:\Users{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx”を修正する必要があります。
これらのコマンドについても解説していきます。
wsl –shutdown
説明:- wslをシャットダウン
wsl2が起動していると最適化できないので、まずはシャットダウン
diskpart
説明:- Windowsのディスク管理ツールのコマンドライン版が起動
ディスク管理ツールを起動します。
select vdisk file=”…”
説明:- 仮想ディスク(VHDまたはVHDXファイル)を選択します。
- このコマンドを実行すると、DiskPartの操作対象がその仮想ディスクに切り替わります。
ext4.vhdxファイルが仮想ディスクです。
このファイルを選択します。
C:\Users{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx”
の
・\{user name}
・\CanonicalGroupLimited.Ubuntu_xxxxxxx
は、PCによって違うのでご確認ください。
ext4.vhdxを右クリックして、パスをコピーすると良い感じだと思います。
attach vdisk readonly
説明:- 仮想ディスクを読み取り専用としてマウント(アタッチ)します。
- マウントされることで、仮想ディスク内のファイルシステムがWindowsのディスク管理で利用可能になります。
compact vdisk
説明:- 仮想ディスクのサイズを縮小します(余分な空きスペースを削除)。
detach vdisk
説明:- 仮想ディスクをアンマウント(デタッチ)します。
これらを実施して容量が減っていれば大成功です。
最後に
WSL2で開発ができるようになって
Windowsで良いじゃんと思っていた私ですが、最近はもうMacの方がこんな面倒くさいこと考えなくてもいいから、Macの方がいいじゃんと思うついこの頃。
ただ容量に関してはある程度上のコマンドを実行すればなんとかなるので
しばらくはWindowsで対応しよう。
あ~MacBook Pro のメモリ 32GB欲しい~よ~!!!
本記事が皆様の参考になれば嬉しいです。