0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerをWSLで動作させている際にPCの容量が圧迫されて困った場合の対処法

Last updated at Posted at 2024-10-25

はじめに

WindowsでDocker Desktopを利用して開発を行う際、WSL2を利用して動作させることってよくありますよね

  • docker build を継続して行っていると、DockerをインストールしているPCのC:ドライブの容量が圧迫され、容量が足りなくなった...
  • docker image prune docker builder prune などDockerの不要ファイル削除コマンドがあるのは知っているが、何を行えばいいか分からない
  • 上記コマンドによって必要なファイルが削除されてしまうかどうかの判断ができない

そんな場合の対処法についてまとめてみました

【注意】記事の内容を実施する前に

私の環境下ではこの記事に記載の手順で対応可能であることが確認取れていますが、他の記事・Docker公式ドキュメントの参照などを行ったのち、あくまで自己責任での実施をお願いいたします

可能性は低いと思いますが、万が一、WSL2、Dockerが動作しなくなった場合は動作環境の再構築が必要になる可能性もあることをご理解いただいた上で実施いただければと思います

実施内容

容量圧縮処理でDISKPARTを利用するためWindowsではPowershellで操作してください

1. docker system dfでDockerが使用している容量の確認

PS C:\Windows\system32> docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        9         39.72GB   35.74GB (89%)
Containers      9         4         8.629GB   9.666MB (0%)
Local Volumes   1         1         1.081GB   0B (0%)
Build Cache     113       0         1.718GB   1.718GB

2. wslの停止

wsl --shutdown

3. DISKPART起動

diskpart

DISKPARTの画面での操作

コマンドまとめ

# Docker(wsl)の容量肥大化の原因となっている仮想ディスクファイル(ext4.vhdx)の選択
# {USERNAME}は環境に合わせて入力
select vdisk file="C:\Users\{USERNAME}\AppData\Local\Docker\wsl\data\ext4.vhdx"
# 仮想ディスクファイルを読み取り専用でアタッチ
attach vdisk readonly
# 仮想ディスクファイルの容量圧縮
compact vdisk
# 仮想ディスクファイルのデタッチ
detach vdisk
# DISKPART終了
exit

1. Docker(wsl)の容量肥大化の原因となっている仮想ディスクファイル(ext4.vhdx)の選択

{USERNAME}はDockerで利用されているext4.vhdxのファイルパスに合わせて入力

select vdisk file="C:\Users\{USERNAME}\AppData\Local\Docker\wsl\data\ext4.vhdx"

2.仮想ディスクファイルを読み取り専用でアタッチ

attach vdisk readonly

3.仮想ディスクファイルの容量圧縮

compact vdisk

4.仮想ディスクファイルのデタッチ

detach vdisk

5.DISKPART終了

exit

容量圧縮を実施しても効果があまり見られない時

Dockerの不要ファイルが影響している可能性があります
Docker公式ドキュメントにある不要なオブジェクトの削除が有効な場合もあります1

コマンド一覧を記載しておくので状況に応じて利用し、不要ファイルを削除した上でDISKPARTの処理を実施してみてください

不要ファイル削除コマンド

# 停止されているコンテナを削除
docker container prune
# 使用されていないビルドキャッシュを削除
docker builder prune
# コンテナで使用されていないイメージを削除
docker image prune
# コンテナで使用されていないボリュームを削除
docker volume prune
# コンテナで使用されていないネットワークを削除
docker network prune

# 上記すべてを一度に実行し削除
# (デフォルトではボリュームが対象外)
docker system prune
# ボリュームを含めすべて削除
docker system prune --volumes

docker container prune

 停止されているコンテナを削除

docker builder prune

 使用されていないビルドキャッシュを削除2

docker image prune

 コンテナで使用されていないイメージを削除

docker volume prune

 コンテナで使用されていないボリュームを削除

docker network prune

 コンテナで使用されていないネットワークを削除

docker system prune

 使用されていないコンテナ、ビルドキャッシュ、イメージ、ボリューム、ネットワークを全て削除するコマンド
 ボリュームはデフォルトでは削除されないため、ボリュームも削除するには--volumesフラグを使う必要がある1

まとめ

  • この記事はDockerとWSLの併用でPCの容量が圧迫される場合、仮想ディスクファイルext4.vhdxが肥大化していることが原因であるケースの対処法を記載
  • WindowsではDISKPARTを用いて仮想ディスクファイルの圧縮が可能
  • 容量圧縮の効果が見られない場合はDockerの不要ファイル削除を検討すべき

最後に

この記事が容量圧迫に苦しんでいるエンジニアの助けとなりますように、、、

参考文献

  1. https://docs.docker.jp/config/pruning.html 2

  2. https://docs.docker.jp/engine/reference/commandline/builder_prune.html

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?