Dockerのディスク使用量が減らない?原因と対処法まとめ

どうも皆さんこんにちは、ホークスファンの市川です。

 

Dockerで開発を行っていると、いつの間にか容量が圧迫されていることが多々あります。

「何がそんなに容量を食ってるの?」と思ったときに、まず確認してみたいのが Docker 内の使用状況です。

下記のコマンドで、Docker 内の容量を確認できます。

docker system df

imagesの容量が高くなっており、数も多くなっています…

上記原因の1つとして考えられるのが、ビルド時に生成される<none>というイメージです。

danglingイメージと呼ばれ、「宙ぶらりんなイメージ」、つまり他のタグ(名前)から参照されておらず、どのコンテナからも使われていないイメージのことを指します。

 

これらのdanglingイメージは、次のコマンドで確認できます。

docker images -f "dangling=true"

出力されたイメージのREPOSITORYTAGの欄が<none>となっているのが特徴です。

なぜ<none>イメージが作られるのか?

Dockerでは、同じ名前とタグを持つイメージは1つしか存在できません

そのため、同じイメージ名で再ビルドを行うと、新しいイメージが作成され、既存のタグは新しいイメージに上書きされます。

このとき、元のイメージはタグを失い、<none> という状態で残ってしまいます

danglingイメージの削除方法

不要なdanglingイメージを削除するには、以下のコマンドで削除できます。

docker image prune
改めて、容量を確認してみましょう。
無事、imagesの容量が減りました。

特定のdanglingイメージを1つだけ削除したい場合

複数のdanglingイメージの中から、特定のものだけを削除したい場合は、以下のコマンドで削除できます。

docker rmi <IMAGE ID>

キャッシュの削除

imagesを削除してもキャッシュに残るので、下記コマンドでキャッシュを削除します。

docker builder prune

まだこれだけではローカルディスクの容量は変わりません

無事削除できたので、容量が開いたかなとローカルディスクの容量を確認したところ、何も変わっていませんでした…

Dockerの仮想ディスクは自動で拡張されるけど、拡張後に容量が空いてもそのままとのこと。

今度は仮想ディスクを圧縮していきます。

仮想ディスクの場所

Dockerの仮想は下記の場所にあります。

C:\Users\<ユーザ名>\AppData\Local\Docker\wsl\data\ext4.vhdx

仮想ディスクの圧縮手順

1.PowerShellを管理者で開く

2.WSLをシャットダンする

wsl --shutdown

3.下記コマンドを実行

diskpart

diskpart の対話モードに入るので、下記コマンドを実行:

select vdisk file="<仮想ディスクの場所>"
attach vdisk readonly
compact vdisk
detach vdisk
exit

最後に

みんなも定期的にメンテナンスしましょう!