Docker の不要なコンテナ・イメージ・キャッシュをまとめて削除する
Docker のコンテナやイメージを一括削除し、不要なキャッシュを整理する方法を確認した
今日やったこと
- Docker のコンテナを一括削除する方法を確認した
- Docker のイメージを一括削除する方法を確認した
- 使われていないコンテナやイメージをまとめて削除する
prune系コマンドを確認した - Docker のビルドキャッシュを削除する方法を確認した
docker rm *ではコンテナ一覧を一括削除できない理由を整理した
コンテナを一括削除する
停止中のコンテナをまとめて削除するには、以下のコマンドを使う。
docker container prune
確認なしで削除したい場合は、-f オプションを付ける。
docker container prune -f
すべてのコンテナ ID を取得して削除する場合は、以下のように書く。
docker rm $(docker ps -aq)
ただし、起動中のコンテナがある場合、そのコンテナの削除は失敗する。
起動中のコンテナも含めて削除したい場合は、-f を付ける。
docker rm -f $(docker ps -aq)
docker rm * では一括削除できない
以下のように実行しても、Docker コンテナの一覧が削除対象になるわけではない。
docker rm *
* は Docker のコンテナ一覧ではなく、現在のディレクトリにあるファイル名やディレクトリ名に展開される。
そのため、以下のようにファイル名をコンテナ名として削除しようとしてしまう。
docker rm README.md docker-compose.yml docs scripts
結果として、次のようなエラーになる。
Error response from daemon: No such container: README.md
Docker のコンテナを一括削除したい場合は、* ではなく docker ps -aq や docker container prune を使う。
イメージを一括削除する
使われていないイメージをまとめて削除するには、以下のコマンドを使う。
docker image prune
docker image prune は、主に不要になった dangling image を削除する。
より広く、どのコンテナからも使われていないイメージを削除する場合は、-a を付ける。
docker image prune -a
確認なしで削除する場合は、-f を付ける。
docker image prune -a -f
ローカルにあるイメージをすべて削除したい場合は、以下のように書く。
docker rmi $(docker images -aq)
ただし、イメージを使用しているコンテナが残っていると削除に失敗することがある。
その場合は、先にコンテナを削除してからイメージを削除する。
docker rm -f $(docker ps -aq)
docker rmi $(docker images -aq)
イメージ削除を強制したい場合は、-f を付ける。
docker rmi -f $(docker images -aq)
キャッシュを削除する
Docker のビルドキャッシュを削除するには、以下のコマンドを使う。
docker builder prune
確認なしで削除する場合は、-f を付ける。
docker builder prune -f
未使用のビルドキャッシュをより広く削除する場合は、-a を付ける。
docker builder prune -a
確認なしで実行する場合は、以下のように書く。
docker builder prune -a -f
まとめて整理する
停止中のコンテナ、未使用のネットワーク、未使用のイメージ、ビルドキャッシュなどをまとめて削除するには、以下のコマンドを使う。
docker system prune
未使用のイメージも含めて、より広く削除したい場合は -a を付ける。
docker system prune -a
確認なしで実行する場合は、-f を付ける。
docker system prune -a -f
ボリュームも含めて削除する場合は、--volumes を付ける。
docker system prune -a --volumes
ただし、ボリュームにはデータベースのデータなどが入っている場合があるため、安易に削除しないように注意する。
学んだこと
docker container pruneは、停止中のコンテナをまとめて削除するコマンドdocker rm $(docker ps -aq)は、すべてのコンテナ ID を取得して削除するコマンド- 起動中のコンテナも含めて削除する場合は、
docker rm -f $(docker ps -aq)を使う docker rm *の*は Docker のコンテナ一覧ではなく、現在のディレクトリ内のファイル名に展開されるdocker image pruneは、不要なイメージを削除するコマンドdocker image prune -aは、どのコンテナからも使われていないイメージを削除するコマンドdocker rmi $(docker images -aq)は、ローカルにあるイメージをまとめて削除するコマンド- イメージを使用しているコンテナが残っていると、イメージ削除に失敗することがある
docker builder pruneは、Docker のビルドキャッシュを削除するコマンドdocker system prune -aは、停止中コンテナ、未使用イメージ、未使用ネットワーク、ビルドキャッシュなどをまとめて削除するコマンド--volumesを付けるとボリュームも削除対象になるため、データ消失に注意が必要
あいまいなこと
- dangling image が具体的にどのような状態のイメージなのか
docker system pruneで削除されるものと削除されないものの範囲- Docker のボリュームにどのようなデータが保存されているのか
次にやること
- Docker ボリュームの役割と削除方法を整理する
docker system dfを使って、Docker が使用している容量を確認する方法を調べる- 安全に Docker 環境を整理する手順をまとめる