なぜリソースのクリーンアップが必要か?
docker-composeでイメージをビルドしたり、コンテナを起動する際にリソース不足で失敗することがあります。
エラー自体は、ディスク容量が不足していることがたいていの理由なので、Docker DesktopでResourcesから増やすことで回避できます。
この対処自体も限界があるので、定期的に本記事で紹介するコマンドたちを実行してクリーンアップしておくのが吉です。
リソースはまとめて一括で削除するか、個別のリソースを指定して削除するかの2通りのやり方があります
全てのリソースを削除
docker system prune
上記のコマンドにより以下のデータがクリーンアップされます
- 停止しているコンテナ(= compose downしていない)
- 使用されていないイメージ
- 使用されていないネットワーク
- 過去にイメージをbuildした際に作成されたキャッシュ
未使用のボリューム(そのボリュームを使用しているコンテナがないボリューム)は、上記コマンドでは削除されません。ボリュームも併せて削除したい場合は、以下のようにします
docker system prune --volumes
公式によると、ボリュームを参照するコンテナーがないだけで、本来は削除したくない重要なデータが誤って削除されてしまうことを防止するためとのこと
リソースを指定して削除
コンテナ
未使用(停止中)のコンテナをすべて削除
docker container prune
イメージ
未使用のイメージをすべて削除
タグ付けされておらず、全コンテナ(動いているか止まっているかは問わない)から参照されていないイメージが削除されます
docker image prune
-aをオプションで付けると、タグ付けされていても、コンテナから使用されていないイメージをすべて削除することが可能です
タグについては、こちらの内容を参照ください
http://docs.docker.jp/v1.12/compose/compose-file.html#build
ボリューム
未使用のローカルボリューム(どのコンテナからも参照されていないボリューム)をすべて削除
docker volume prune
ネットワーク
未使用のネットワーク(どのコンテナーからも参照されていないネットワーク)をすべて削除
docker network prune
ビルドキャッシュ
未使用のビルドキャッシュをすべて削除
docker builder prune
まとめ
いかがでしたでしょうか。本記事では、Dockerで不要なイメージやコンテナ等のリソースをクリーンアップする方法について紹介しています。ぜひ参考にしてみてください。