今日やったこと

  • 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 -aqdocker 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 環境を整理する手順をまとめる