GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

未使用のDockerリソースを整理する方法

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タスクを作成できます。 最近追加されたリソースの保持期間を作成するためのフィルター。


Docker
  1. DockerComposeの使用方法

  2. Dockerコンテナを接続する方法

  3. 環境変数をDockerコンテナに渡す方法

  1. すべてのDockerイメージ、コンテナー、ボリューム、ネットワーク、および未使用のリソースを削除する方法

  2. Dockerコンテナを一覧表示する方法

  3. すべての Docker コンテナーを削除する方法

  1. 実行中のDockerコンテナを自動的に更新する方法

  2. Dockerコンテナをエクスポートおよびインポートする方法

  3. Dockerコンテナ間でデータを共有する方法