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