Dockerイメージ、コンテナ、およびボリュームの削除方法

紹介

Dockerは、アプリケーションやサービスをコンテナに包んでどこでも実行できるようにすることが簡単です。しかし、Dockerを使用するにつれて、未使用のイメージ、コンテナ、およびデータボリュームが過剰に蓄積され、出力を混乱させ、ディスク容量を消費することも簡単です。

Dockerは、コマンドラインからシステムをクリーンアップするための必要なツールをすべて提供します。このチートシート形式のガイドは、未使用のDockerイメージ、コンテナ、およびボリュームを削除してディスク容量を解放し、システムを整理するのに役立つコマンドのクイックリファレンスを提供します。

このガイドの使用方法:

  • このガイドは、自己完結型のコマンドラインスニペット形式のチートシートです。
  • 完了しようとしているタスクに関連するセクションにジャンプしてください。

注意:コマンドの中で使用されるコマンド置換構文、command $(command)は、bashzsh、およびWindows Powershellなどの多くの人気のあるシェルで利用可能です。ライブサーバーにDockerアプリケーションを展開するための1クリック方法をお探しの場合は、DigitalOcean App Platformをご覧ください。

もしあなたがライブサーバーにDockerアプリケーションを1クリックでデプロイする方法を探しているなら、DigitalOcean App Platformをチェックしてみてください。

未使用またはダングリングのイメージ、コンテナ、ボリューム、およびネットワークの全削除

Dockerは、ダングリング(タグ付けされていないか、コンテナに関連付けられていない)イメージ、コンテナ、ボリューム、およびネットワークなど、任意のリソースをクリーンアップする単一のコマンドを提供しています。

docker system prune

さらに、停止されたコンテナと未使用のイメージ(ダングリングイメージだけでなく)を削除するには、コマンドに-aフラグを追加してください。

docker system prune -a

Dockerイメージの削除

1つ以上の特定のイメージを削除する

まず、docker images コマンドを使用し、-a フラグを付けて、削除したいイメージのIDを特定します。これにより、すべてのイメージが表示され、中間イメージレイヤーも含まれます。削除したいイメージのIDやタグを docker rmi に渡すことができます:

リスト:

docker images -a

削除:

docker rmi Image Image

注意: docker images コマンドの -a または --all フラグは、すべてのDockerイメージを表示し、タグによって参照されていない中間イメージレイヤーも含んでいます。デフォルトでは、docker images は少なくとも1つのタグがあるイメージのみを表示します。ただし、タグがないがまだシステムのディスクスペースを消費しているイメージが存在する可能性があります。-a フラグは、ディスクスペースを節約するためにプルーニングできるイメージを識別するのに役立ちます。docker rmi コマンドで使用する場合、-f または --force フラグも、タグのないイメージを削除するために使用できます。

ダングリングDockerイメージの削除

Dockerイメージは複数のレイヤーで構成されています。ダングリングイメージは、タグ付きイメージとの関係がなくなったレイヤーです。彼らはもはや目的を果たさず、ディスクスペースを消費しています。docker images コマンドにフィルターフラグ -f と値 dangling=true を追加することで、ダングリングイメージを特定できます。削除することを確認したら、docker image prune コマンドを使用できます:

注意: イメージをタグ付けせずに構築すると、タグ付けされたイメージとの関連がないため、イメージはダングリングイメージのリストに表示されます。 タグを指定してイメージを構築することで、この状況を回避できます。また、docker tagコマンドを使用して、イメージに後からタグを付けることもできます。

リスト:

docker images -f dangling=true

削除:

docker image prune

パターンに従ってイメージを削除する

docker imagesgrepの組み合わせを使用して、パターンに一致するすべてのイメージを見つけることができます。満足したら、awkを使用してIDをdocker rmiに渡すことで、それらを削除できます。これらのユーティリティはDockerによって提供されておらず、すべてのシステムで必ずしも利用できるわけではありません。

リスト:

docker images -a |  grep "pattern"

削除:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

すべての画像を削除します

システム上のすべてのDockerイメージは、docker imagesコマンドに-aを追加することでリストアップできます。それらをすべて削除したいと確信したら、docker rmiにイメージIDを渡すために-qフラグを追加できます:

リスト:

docker images -a

削除:

docker rmi $(docker images -a -q)

コンテナの削除

1つ以上の特定のコンテナを削除する

削除したいコンテナの名前またはIDを見つけるには、docker psコマンドに-aフラグを使用します:

リスト:

docker ps -a

削除:

docker rm ID_or_Name ID_or_Name

終了時にコンテナを削除する

docker run --rm を実行して、終了時に自動的に削除されることを確認できます:

実行して削除:

docker run --rm image_name

すべての終了したコンテナを削除します

docker ps -a を使用してコンテナを特定し、その状態によってフィルタリングできます:createdrestartingrunningpaused、または exitedexited コンテナの一覧を確認するには、-f フラグを使用して状態に基づいてフィルタリングします。これらのコンテナを削除することを確認したら、-q を使用して ID を docker rm コマンドに渡します:

リスト:

docker ps -a -f status=exited

削除:

docker rm $(docker ps -a -f status=exited -q)

複数のフィルタを使用してコンテナを削除する

Dockerフィルタは、追加の値を使用してフィルタフラグを繰り返すことで組み合わせることができます。これにより、いずれかの条件を満たすコンテナのリストが得られます。たとえば、created(無効なコマンドでコンテナを実行した場合に発生する状態)またはexitedとしてマークされたすべてのコンテナを削除したい場合は、2つのフィルタを使用できます:

リスト:

docker ps -a -f status=exited -f status=created

削除:

docker rm $(docker ps -a -f status=exited -f status=created -q)

パターンに従ってコンテナを削除します

docker psgrepの組み合わせを使用して、パターンに一致するすべてのコンテナを見つけることができます。削除したいリストを満足するまで見つけたら、awkxargsを使用してIDをdocker rmに供給できます。これらのユーティリティはDockerによって提供されておらず、すべてのシステムで利用可能とは限りません:

リスト:

docker ps -a |  grep "pattern

削除:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

すべてのコンテナを停止して削除します

システム上のコンテナを確認するには、docker ps コマンドを使用できます。-a フラグを追加すると、すべてのコンテナが表示されます。削除してもよいと確信したら、docker stop および docker rm コマンドに ID を供給するために -q フラグを追加できます:

一覧:

docker ps -a

削除:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

ボリュームの削除

1つ以上の特定のボリュームを削除します

削除したいボリュームの名前を特定するために docker volume ls コマンドを使用できます。それから、docker volume rm コマンドで 1 つ以上のボリュームを削除できます:

一覧:

docker volume ls

削除:

docker volume rm volume_name volume_name

ダングリングボリュームを削除します

ボリュームの目的は、コンテナから独立して存在することです。そのため、コンテナが削除されても、ボリュームは自動的に削除されません。ボリュームが存在し、どのコンテナにも接続されていない場合、それは ダングリングボリュームと呼ばれます。これらを特定して削除するためには、docker volume ls コマンドを使用し、ダングリングボリュームに結果を制限するフィルターを設定します。リストを確認したら、docker volume prune を使用してすべてを削除できます:

リスト:

docker volume ls -f dangling=true

削除:

docker volume prune

コンテナとそのボリュームを削除する

無名のボリュームを作成した場合、-v フラグを使用してコンテナと同時に削除できます。ただし、これは 無名 のボリュームにのみ適用されます。コンテナが正常に削除されると、そのIDが表示されます。ボリュームの削除に言及されません。ボリュームが無名であれば、システムからサイレントに削除されます。名前が付けられている場合は、サイレントに残ります。

削除:

docker rm -v container_name

結論

このガイドでは、Dockerで使用される一般的なコマンドの一部を取り上げています。イメージ、コンテナ、およびボリュームを削除するために使用されます。それぞれに使用できる他の多くの組み合わせとフラグがあります。利用可能な機能の包括的なガイドについては、Dockerドキュメントのdocker system prunedocker rmidocker rm、およびdocker volume rmを参照してください。ガイドに表示したい一般的なクリーンアップタスクがある場合は、コメントでお知らせいただくか、提案をお願いします。

Dockerコンテナの異なるコンポーネントを詳しく見るには、Dockerエコシステム:共通コンポーネントへの入門をご覧ください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes