こんにちは、sanagiです。
先日、Dockerファイルを作成時に、何回かビルドを繰り返していたのですが、気づいたらCドライブのディスクがいっぱいになってしまいました。
今回は、その際にやったことを記事にします。
起きたこと
①気づいたら、WindowsのCドライブの空き容量が残り1GBくらいになっていました。(画像は今の状態のやつです↓)

②直近やっていた作業がDockerでの環境構築だったので、Dockerが疑わしいと判断しました。
確認としてやったこと
①Dockerの使用容量確認
まずDockerでどれくらい容量使っているのか確認しました。
ターミナル上で「docker system df」を実行し確認します。
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 84 7 97.49GB 96.33GB (98%)
Containers 7 2 1.749GB 1.026GB (58%)
Local Volumes 36 6 7.68GB 5.318GB (69%)
Build Cache 64 0 943.4MB 943.4MB
⇒合計で約107GB使われているようです。(逼迫していた時はもっと使われていましたが。)
②イメージ一覧を確認
以下コマンドでイメージ一覧を確認しました。
$ docker image ls
すると、こんな感じで<none>のimageがたくさん出てきました!
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> ************ 30 hours ago 1.78GB
<none> <none> ************ 4 days ago 673MB
<none> <none> ************ 7 days ago 648MB
<none> <none> ************ 7 days ago 648MB
<none> <none> ************ 8 days ago 646MB
"none"のimageとは何なのか?
調べてみたら、ダングリングイメージ(dangling images) と呼ばれるものだそうです。
以下のような流れで、ビルドするたびに古いイメージが<none>で増えていくようです。
1回目のビルド:
myapp:latest ← これが作られる
2回目のビルド(同じタグで):
myapp:latest ← 新しいイメージがこの名前を奪う
<none>:<none> ← 古いイメージはタグを失って宙ぶらりんに
"none"イメージを全て削除しよう
"none"イメージは以下のコマンドで一括削除できました。
$ docker image prune
実行するとこんな感じで、本当に削除するのか聞かれるのでyを押すと全て削除されました。
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:************************
deleted: sha256:************************
deleted: sha256:************************
deleted: sha256:************************
deleted: sha256:************************
deleted: sha256:************************
・・・
Total reclaimed space: 785.7MB
おわりに
どうでしたか?
私は、ディスクの使用率が上がって初めて「ダングリングイメージ」というものを知りました。
こういったトラブル時に新しく学ぶことって結構ありますね。
今後は定期的に「docker image prune」を実行して、不要なイメージを削除するのが良さそうです。

