はじめに
皆さんは普段の開発においてdockerのディスクスペースを意識していますか?
ディスクスペースとは、簡単に言うと「データを保持できる容量」のことです。
実は、定期的にディスクスペースを開放してあげないと、さまざまな困りごとに直面してしまいます、、、
- 新たなコンテナの起動失敗
- イメージの作成失敗
- パフォーマンスの低下 etc...
今回はディスクスペースを開放する手順を紹介しようと思います。
どうすればディスクスペースを開放できるの?
1. dockerのディスクスペースの現状を把握
まずは自身のdockerがどれくらいのディスクスペースを使用しているかをチェックしましょう。
以下のコマンドを流すと確認できます。
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 50 14 26.06GB 21.43GB (82%)
Containers 16 15 3.13MB 0B (0%)
Local Volumes 26 15 966.7MB 231.6MB (23%)
Build Cache 476 17 7.833GB 7.503GB
各項目の意味
TYPE:ディスクスペースを使用しているリソースの種類
TOTAL:システムに存在する該当リソースの総数
ACTIVE:現在使用中のリソースの数
SIZE:それぞれのリソースが使用しているディスクスペースの合計
RECLAIMABLE:システムが不要と判断したリソースの容量。つまり、この数値分ディスクスペースを開放できる。
以下の例は、「イメージが50個あり、そのうち14個が現在使用中。50個のリソースが26.06GB使用しており、そのうち21.43GBを削減できる。」ということを示しています。
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 50 14 26.06GB 21.43GB (82%)
2. 不要なリソースを削除する
不要なリソースを削除するためのコマンドは以下のとおりです。
自身の現状に合ったコマンドを実行してください。
*以下のコマンドを実行すると、「未使用のもの」が削除されます。
- イメージのみを削除する
$ docker image prune
- コンテナのみを削除する
$ docker container prune
- ボリュームのみを削除する
$ docker volune prune
- ビルドのキャッシュのみを削除する
$ docker builder prune
- 上記全て+未使用のネットワークを削除(ただしボリュームは削除されない)
$ docker system prune
# --volumes をつけるとボリュームも削除可能
補足:docker system prune でボリュームが削除されない理由
$ docker system prune
先ほど、上記コマンドを実行すると、「未使用のイメージ・コンテナ・ビルドのキャッシュ・ネットワーク」が削除されるという説明をしました。
ではなぜボリュームは削除されないのでしょうか?
それは、基本的にボリュームに保存されるデータは長期間維持されることを前提としているからです。
アプリケーションの状態や設定ファイルなどを保存しているため、これを自動的に削除するのはリスクが高いと判断されています。
上記のような理由から、Docker 17.06.1がリリースされた際にボリュームが削除されないようになりました。