Dockerを使用すると、アプリケーションをコンテナーとしてすばやくパッケージ化できるため、ラップトップからパブリッククラウドまでどこでもアプリケーションを実行できます。 Dockerをしばらく使用すると、冗長なコンテナー、イメージ、その他のリソースを大量に蓄積できます。片付ける方法は次のとおりです。
Dockerは通常、指示がない限り何も削除しません。つまり、プルしたイメージと作成したコンテナは、使用されなくなったとしても、おそらくシステム上でぶら下がっています。
冗長なリソースが多すぎると、すぐに過剰なディスク使用量につながる可能性があります。また、コマンドラインでリソースを一覧表示するときに出力が非常に長くなり、探している情報を見つけるのが難しくなります。
「ぶら下がっている」リソースとは、現在コンテナに関連付けられていないDockerオブジェクトのことです。これには、Dockerイメージ、ネットワーク、ボリューム、および停止したコンテナーが含まれます。画像の場合、タグがなく、参照がない場合、画像は「ぶら下がっています」。
Dockerは、すべてのぶら下がっているリソースと停止したコンテナーをパージできる単一のハウスキーピングコマンドを提供します。リソースが実行中によって使用されていない限り コンテナ、削除されます。
docker system prune
コマンドを実行すると、削除するリソースタイプを一覧表示する確認プロンプトが表示されます。 y
と入力します Enterキーを押して、削除を続行します。 -f
を渡すことで、確認を無効にできます または--force
フラグ。
デフォルトでは、ボリュームは削除されません。ボリュームを削除すると、保持したい永続データが失われるリスクがあります。コンテナに関連付けられていないボリュームを削除する場合は、--volumes
を渡します それらを操作に含めるためのフラグ。
-a
を渡すことで、さらに多くの画像データを削除できます (または--all
) 国旗。これにより、Dockerはすべての未使用を削除します 参照されていない画像をぶら下げるだけでなく、画像。システム上の各イメージは、それを必要とする実行中のコンテナが少なくとも1つない限り、削除されます。
フィルタはprune
で使用できます 指図。フィルタリングにより、何を削除するかをより細かく制御できます。現在、until
の2つのフィルターがサポートされています およびtimestamp
。
until
–until
フィルタは、特定の時間より前に作成されたコンテナ、イメージ、およびネットワークの削除を防ぎます。時刻は、Unixタイムスタンプ(秒単位)など、いくつかの異なる形式で指定できます(例:1614890000
)または日付形式のタイムスタンプ文字列(例:2021-03-04T20:30:00
。label
–label
filterは削除を制限するため、指定されたラベルを持つリソースのみが削除されます。ラベルは、コンテナ、イメージ、ネットワーク、およびボリュームで使用できます。ラベルはlabel=key=value
のいずれかとして指定します (キーは値と等しい)、label!=key=value
(キーが値と等しくない)、label=key
(指定されたラベルがあります)またはlabel!=key
(指定されたラベルはありません)。
フィルタを使用するには、フィルタを--filter
に渡します フラグ:
docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=bar
このコマンドは、foo=bar
を使用してリソースを削除します 3月4日の午後8時30分より前に作成されたラベル。この基準に一致しないリソースはそのまま残されます。
常にdocker system prune
を使用する必要はありません 。 Dockerは、よりきめ細かいプルーニングコマンドも提供します。これらは、1つのタイプのリソースのみを削除する場合に使用できます。
--force
および--filter
docker system prune
でサポートされているフラグ 以下にリストされている個々のプルーニングコマンドにも適用されます。
日常のDockerコマンドを使用すると、すぐに多数のコンテナーが停止する可能性があります。 docker build
を実行すると、問題はさらに悪化します。 --rm
のない画像 フラグ。これにより、中間ビルドレイヤーが保持されます。
docker container prune
を実行します 停止したコンテナをクリーンアップします。 docker ps
を実行すると、停止したコンテナは表示されません;それらを表示するには、docker ps -a
を使用する必要があります システム上のすべてのコンテナを表示します。
個々のコンテナを削除する場合は、docker rm
を使用してください コンテナのIDを渡すコマンド。これは、docker ps
を実行することで取得できます。 。コンテナが実行されている場合は、--force
を使用する必要があります フラグを立てて削除します。
docker image prune
を使用する ぶら下がっている画像をすべて削除します。 docker system prune
のように 、これは、タグが付いていないか、どのコンテナからも参照されていない画像に影響します。
-a
を追加します 代わりにフラグを立てて、未使用の画像をすべて削除します。これにより、少なくとも1つのコンテナで必要とされていないシステム上のすべてのイメージが削除されます。タグ付きの画像も含まれるため、DockerHubから古いプルをすばやくクリアできます。
docker rmi
を使用して特定の画像を削除できます コマンド:
docker rmi wordpress:latest
1つの画像に複数のタグがある場合、docker rmi
実際に画像を削除せずに、指定されたタグを削除します。最後のタグが削除されると削除されます。
Dockerネットワークは自動的にクリーンアップされません。時間が経つにつれて、あなたはそれらの数が多くなる可能性があります。これにより、冗長な仮想ブリッジデバイスとルーティングテーブルエントリでシステムが乱雑になります。 docker network prune
を実行します 未使用のネットワークを破棄し、変更をホストの構成に戻します。
docker rm my-network
を実行すると、個々のネットワークを削除できます。 。
Dockerがボリュームを削除することはありません。これらはコンテナによって作成された永続データを保存するため、意図しない削除は壊滅的な結果をもたらす可能性があります。ボリュームは、複数のコンテナーで共有されたり、将来別のコンテナーに接続できるように休止状態のままになる場合もあります。
未使用のボリュームを整理する場合は、docker volume prune
を実行する必要があります 。これにより、少なくとも1つのコンテナで使用されていないボリュームが削除されます。個々のボリュームは、docker volume rm my-volume
を使用して削除できます 。
--rm
を渡すように注意することで、将来的に冗長なリソースが蓄積するリスクを最小限に抑えることができます。 docker build
へのフラグ およびdocker run
コマンド。
build
と一緒に使用する場合 、中間ビルドレイヤー(<none>:<none>
としてマークされている)が削除されます docker images
)出力。これは、ディスク使用量の大幅な削減を表すことができます。通常、Dockerfile
の各命令に対して新しい中間レイヤーが作成されます。 。後で新しい画像の開始点として使用する予定がない限り、通常は削除できます。
--rm
を使用する docker run
を使用 コマンドが終了するとすぐにコンテナを削除します。これは、使い捨てコンテナでバイナリを実行する場合に理想的です。 --rm
を渡さないでください 永続的に実行する予定のコンテナ、またはオンデマンドで開始および停止したいコンテナ。例としては、ユーザーが指定したコマンドの代わりにサービスを実行するWebサーバーやデータベースサーバーがあります。
Dockerリソースをプルーニングすると、ディスクスペースが解放され、DockerCLIでの作業に役立ちます。冗長なコンテナと画像を排除することで、探しているリソースを簡単に特定できます。
Dockerは、指示がない限り何も削除しません。 docker system prune
を実行する価値があります システムを清潔に保つために定期的に。 until
を使用して、毎月実行するcronタスクを作成できます。 最近追加されたリソースの保持期間を作成するためのフィルター。