Table of Contents
Dockerのチートシート
はじめに
Dockerは、アプリケーションとサービスをコンテナに簡単にラップできるため、どこでも実行できます。しかしDockerを使用していると、未使用のイメージ、コンテナ、データボリュームが過剰に蓄積しやすく、出力がごちゃごちゃになり、ディスク容量を消費してしまいます。
Dockerには、コマンドラインからシステムをクリーンアップするために必要なすべてのツールが用意されています。この早見表式のガイドでは、未使用のDockerのイメージ、コンテナ、およびボリュームを削除することでディスク領域を解放し、システムを整理しておくのに役立つコマンドを簡単に参照できます。
このガイドの使用方法:
- このガイドは、自己完結型のコマンドラインスニペットを使用した早見表式です。
- 実行したいタスクに関連するセクションにお進みください。
コマンドで使用されるコマンド置換構文、<^>コマンド<^> $(<^>コマンド<^>)は、bash、zsh、Windows Powershellなどの多くの一般的なシェルで使用できます。
未使用または不要なイメージ、コンテナ、ボリューム、およびネットワークをすべて削除する
Dockerは、(コンテナに関連付けられていない)不要なリソース(イメージ、コンテナ、ボリューム、およびネットワーク)をクリーンアップする特定のコマンドを提供します。
docker system prune
さらに、停止したコンテナと(不要なイメージだけでなく)すべての未使用のイメージを削除するには、コマンドに-aフラグを追加します。
docker system prune -a
Dockerイメージを削除する
1つ以上の特定のイメージを削除する
削除するイメージのIDを特定するために、-aフラグを指定してdocker imagesコマンドを使用します。これにより、中間イメージレイヤーを含むすべてのイメージが表示されます。削除するイメージを特定したら、そのIDまたはタグをdocker rmiに渡すことができます。
一覧表示する:
docker images -a
削除する:
docker rmi <^>Image<^> <^>Image<^>
不要なイメージを削除する
Dockerイメージは、複数のレイヤーで構成されています。不要なイメージは、タグ付けされたイメージとは関係のないレイヤーです。それらはもはや目的を果たすことはなく、ディスク領域を消費するだけです。これは、dockerイメージコマンドに、フィルターフラグ-fとdangling=trueの値を追加することでその位置を特定できます。削除する場合は、docker image pruneコマンドを使用できます。
注:タグを付けずにイメージを作成すると、タグ付けされたイメージと関連付けられていないため、不要なイメージのリストに表示されます。ビルド時にタグを指定することで、この状況を回避できます。また、docker tagコマンドを使用すると遡及的にイメージにタグ付けできます。
一覧表示する:
docker images -f dangling=true
削除する:
docker image prune
パターンに従ってイメージを削除する
docker imagesとgrepを組み合わせて、パターンと一致するすべてのイメージを特定することができます。問題がなければ、awkを使用してIDをdocker rmiに渡すことにより削除できます。これらのユーティリティはDockerによって提供されているわけではなく、必ずしもすべてのシステムで使用できるわけではないことに注意してください。
一覧表示する:
docker images -a | grep "<^>pattern<^>"
削除する:
docker images -a | grep "<^>pattern<^>" | awk '{print $3}' | xargs docker rmi
すべてのイメージを削除する
システム上のすべてのDockerイメージは、docker imagesコマンドに-aを追加することで一覧表示できます。すべて削除したい場合は、-qフラグを追加してイメージIDをdocker rmiに渡すことができます。
一覧表示する:
docker images -a
削除する:
docker rmi $(docker images -a -q)
コンテナを削除する
1つ以上の特定のコンテナを削除する
削除するコンテナの名前またはIDを特定するために、-aフラグを指定してdocker psコマンドを使用します。
一覧表示する:
docker ps -a
削除する:
docker rm <^>ID_or_Name<^> <^>ID_or_Name<^>
終了時にコンテナを削除する
コンテナを作成する時に、終了後にコンテナを保持しないとわかっている場合は、docker run --rmを実行して、終了時に自動的に削除することができます。
実行および削除:
docker run --rm <^>image_name<^>
終了したすべてのコンテナを削除する
docker ps -aを使用してコンテナを特定し、created、 restarting、running、paused、またはexitedのステータスでフィルタリングできます。終了したコンテナのリストを確認するには、-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 psとgrepを組み合わせて、パターンと一致するすべてのコンテナを特定することができます。削除するリストが出来たら、awkとxargsを使用して、docker rmにIDを指定することができます。これらのユーティリティはDockerによって提供されているわけではなく、必ずしもすべてのシステムで使用できるわけではないことに注意してください。
一覧表示する:
docker ps -a | grep "<^>pattern<^>”
削除する:
docker ps -a | grep "<^>pattern<^>" | awk '{print $1}' | xargs docker rm
すべてのコンテナを停止して削除する
docker psを使用して、システム上のコンテナを確認できます。-aフラグを追加すると、すべてのコンテナが表示されます。削除する場合は、-qフラグを追加して、docker stopおよびdocker rmコマンドにIDを指定できます。
一覧表示する:
docker ps -a
削除する:
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
ボリュームを削除する
1つ以上の特定のボリュームを削除する - Docker 1.9以降
削除する1つまたは複数のボリューム名を特定するために、docker volume lsコマンドを使用します。その後、次のdocker volume rmコマンドを使用して、1つ以上のボリュームを削除できます。
一覧表示する:
docker volume ls
削除する:
docker volume rm <^>volume_name<^> <^>volume_name<^>
不要なボリュームを削除する- Docker 1.9以降
ボリュームのポイントはコンテナから独立して存在することなので、コンテナが削除されても、同時にボリュームが自動的に削除されることはありません。ボリュームが存在するが、どのコンテナにも接続されていない場合は、不要なボリュームと呼ばれます。不要なボリュームを削除する前に特定する場合は、docker volume lsコマンドに、フィルターを指定して結果を不要なボリュームに制限することができます。リストに問題がなければ、次のdocker volume pruneを使用してすべて削除できます。
一覧表示する:
docker volume ls -f dangling=true
削除する:
docker volume prune
コンテナとそのボリュームを削除する
名前のないボリュームを作成した場合は、-vフラグを指定してコンテナと同時に削除できます。これは_名前のない_ボリュームでのみ機能することに注意してください。コンテナが正常に削除されると、そのIDが表示されます。ボリュームの削除については、参照が行われないことに注意してください。名前が付いていない場合は、システムから何の通知もなく削除されます。名前が付いている場合は、何の通知もなく存在し続けます。
削除する:
docker rm -v <^>container_name<^>
まとめ
このガイドでは、Dockerを使用してイメージ、コンテナ、およびボリュームを削除するために使用する一般的なコマンドについていくつか説明しました。他にも、それぞれに使用できる組み合わせやフラグが数多くあります。使用可能な機能に関する包括的なガイドについては、docker system prune、docker rmi、docker rm、およびdocker volume rm用のDockerドキュメントを参照してください。ガイドで参照したい一般的なクリーンアップタスクがある場合は、質問やご提案をコメント欄までぜひお寄せください。