Docker が占有するディスク領域をクリーンアップする方法

Docker が占有するディスク領域をクリーンアップする方法

Docker は多くのスペースを占有します。コンテナを実行したり、イメージを取得したり、アプリケーションをデプロイしたり、独自のイメージをビルドしたりするたびに、ディスク領域が大量に占有されます。

この問題に悩んでいる方は、Docker がディスク領域をどのように使用し、それをどのように再利用するかを見てみましょう。

docker が占有するスペースは、次のコマンドで確認できます。

$ docker システム df 

TYPE 、Docker で使用される 4 種類のディスクをリストします。

  • 画像: 取り外された画像やローカルに作成された画像を含む、すべての画像が占めるスペース。
  • コンテナ: 実行中のコンテナが占有するスペース。各コンテナの読み取り/書き込み層のスペースを示します。
  • ローカル ボリューム: コンテナーがローカル データ ボリュームをマウントする領域。
  • ビルド キャッシュ: イメージのビルド プロセス中に生成されるキャッシュ スペース (BuildKit を使用する場合にのみ使用可能、Docker 18.09 以降で使用可能)。

最後のRECLAIMABLEは再利用可能なサイズです。

それぞれのタイプを見てみましょう。

コンテナのディスク使用量

コンテナが作成されるたびに、次のようなファイルとディレクトリが作成されます。

  • /var/lib/docker/containers/IDディレクトリ。コンテナがデフォルトのログ モードを使用する場合、そのすべてのログは JSON 形式でこのディレクトリに保存されます。
  • /var/lib/docker/overlay2ディレクトリには、コンテナの読み取り/書き込みレイヤーが含まれています。コンテナが独自のファイル システムを使用してデータを保存する場合、データはこのディレクトリに書き込まれます。

ここで、Docker がインストールされたばかりであると仮定して、完全にクリーンなシステムから始めます。

まず、NGINX コンテナを起動します。

dfコマンドを実行すると、次のように表示されます。

  • 画像 1 枚、126MB
  • コンテナ

コンテナが実行中でイメージが使用されているため、現時点では再利用可能なスペースはありません。

ここで、コンテナ内に 100 MB の空のファイルを作成します。

$ docker exec -ti www \
 dd if=/dev/zero of=test.img bs=1024 count=0 seek=$[1024*100]

スペースをもう一度確認してください:

コンテナが占めるスペースが増えていることがわかります。このファイルはローカルマシンのどこに保存されていますか?

前述の通り、コンテナの読み書き層に保存されます。

コンテナが停止すると、コンテナが占有していたスペースは再利用可能になります。

リサイクル方法は?コンテナを削除すると、それに関連付けられた読み取り/書き込みレイヤーが占めていたスペースも削除されます。

停止したコンテナをワンクリックですべて削除することもできます。

$ dockerコンテナのプルーン

コンテナを削除した後、イメージをリサイクルすることもできます。

上記のdocker container pruneコマンドは、停止したコンテナを削除します。すべてのコンテナ (停止中のコンテナと実行中のコンテナを含む) を削除する場合は、次の 2 つのコマンドを使用できます。

docker rm -f $(docker ps -aq) を実行します。

$ docker コンテナ rm -f $(docker コンテナ ls -aq)

ミラーディスクの使用

一部の画像は表示されません:

  • サブイメージは他のイメージによって参照される中間イメージであり、削除することはできません。
  • 一時停止されたイメージは、使用されなくなり、削除できるイメージです。

次のコマンドは、保留中のすべてのイメージを一覧表示します。

$ docker イメージ ls -f dangling=true 

このような画像を削除します:

$ docker イメージ rm $(docker イメージ ls -f dangling=true -q)

または:

$ dockerイメージのプルーニング

すべての画像を削除する場合は、次のコマンドを使用できます。

$ docker イメージ rm $(docker イメージ ls -q)

コンテナによって使用されているイメージは削除できないことに注意してください。

データボリュームのディスク使用量

データ ボリュームは、コンテナー独自のファイル システムの外部にあるデータ ストレージです。

たとえば、コンテナ内のアプリケーションに写真をアップロードする機能がある場合、コンテナが終了するとコンテナ内のデータが削除されるため、アップロード後に写真をコンテナ内に保存することはできません。したがって、これらの写真はコンテナの外部、つまりデータボリュームに保存する必要があります。

たとえば、テスト用に MongoDB コンテナを実行し、大量のテスト データをインポートします。このデータはコンテナ内ではなく、データ ボリューム内にあります。これは、データ ボリュームが MongoDB Dockerfile で使用されるためです。

テストが完了すると、MongoDB コンテナは削除されますが、テスト データはまだ残っており、削除されていません。

使用されなくなったデータ ボリュームを削除します。

$ docker ボリューム rm $(docker ボリューム ls -q)

または:

$ dockerボリュームプルーニング

キャッシュディスクスペースの構築

Docker 18.09 では BuildKit が導入され、ビルド プロセスのパフォーマンス、セキュリティ、ストレージ管理などの機能が向上しました。

ビルド キャッシュを削除するには、次のコマンドを使用します。

$ docker ビルダー プルーン

ワンクリッククリーニング

上記の説明から、コンテナ、イメージ、データ ボリュームはすべて、スペースの再利用に役立つpruneサブコマンドを提供していることがわかります。

実際、docker システム レベルにはpruneサブコマンドもあり、これを使用すると、ワンクリックで不要なスペースをクリーンアップできます。

$ docker システムプルーン

このコマンドを定期的に実行するのは良い習慣です。

翻訳元:

https://medium.com/better-programming/docker-tips-clean-up-your-local-machine-35f370a01a78

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker による Overlay2 の占有ディスク領域のクリーンアップについて (テスト済みで効果的)
  • Docker ディスク領域クリーニングのソリューション
  • Dockerディスク容量不足の問題を解決する
  • Docker ディスク領域の使用状況を分析してクリーンアップする方法
  • Dockerがディスク容量を全て占有する問題の解決策
  • Dockerコンテナによるディスク容量不足とアクセス不能の問題の解決策

<<:  WeChatアプレットが計算機機能を実装

>>:  MySQLは効率的なインデックス例分析を確立する

推薦する

ウェブページ制作TDは隠し表示もオーバーフロー可能

おそらく、この記事にこのようなタイトルを付けると、誰かがこう尋ねるでしょう。「なぜまだテーブルに注目...

Ubuntu Linux に Git と GitHub をインストールして使用する

Git 入門Git は、Linux(R) カーネル開発の管理を支援するために 2005 年に Lin...

Vue プロジェクト @change 複数のパラメータを使用して複数のイベントを渡す

まず、変更イベントは 1 つだけです。 changelevel() //値を選択選択を変更して行の値...

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

mysql 8.0.12 winx64 のダウンロードとインストールのチュートリアル

MySQL 8.0.12のダウンロードとインストールのチュートリアルは参考までに、具体的な内容は次の...

Docker 環境で JMeter+Grafana+influxdb ビジュアル パフォーマンス監視プラットフォームを構築するチュートリアル

目次1. Dockerをインストールする2. influxDBをインストールして設定する3. Gra...

Vue ポーリング リクエスト ソリューションの完全な例

世論調査の理解実際、ポーリングの焦点はループ自体ではなく、実行間の間隔にあります。 Ajax は非同...

Docker のポート解放失敗の解決策

今日、非常に奇妙な状況に遭遇しました。docker イメージを更新した後、docker-compos...

HTML におけるいくつかの特殊属性タグの使用法の紹介

以下の属性はブラウザとの互換性があまりありません。 1.transform:rotate(45度) ...

ハッシュテーブルのJavaScript実装の詳細な説明

目次1. ハッシュテーブルの原理2. ハッシュテーブルの概念3. ハッシュ競合問題1. チェーンアド...

Linux lnコマンドの使用

1. コマンドの紹介ln コマンドは、ファイルのリンクを作成するために使用されます。リンクは、ハード...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...

1 つの記事で Nginx ロケーション マッチングの実装を理解する

チームはフロントエンドとバックエンドを分離しているため、フロントエンドが Nginx とノード層を引...

nginx を介して方向プロキシを実装するプロセスの図

この記事は主に、nginx を介して方向プロキシを実装するプロセスを紹介します。この記事のサンプル ...

Dockerデータボリューム操作の実装

データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...