ホームページ >バックエンド開発 >Golang >`docker system df` および `/system/df` (docker API エンドポイント)

`docker system df` および `/system/df` (docker API エンドポイント)

WBOY
WBOY転載
2024-02-09 16:45:08567ブラウズ

`docker system df` 与 `/system/df` (docker api 端点)

php エディターの Yuzai が、docker の 2 つのコマンド、`docker system df` と `/system/df` (docker api エンドポイント) を紹介します。どちらのコマンドも docker システムのリソース使用量を表示するために使用されますが、使用方法と結果の表示方法が若干異なります。 `docker system df` は、ターミナルで直接実行できる docker コマンドで、docker システム内のさまざまなリソース (イメージ、コンテナ、データ ボリュームなどを含む) の使用状況と、全体的なリソースの使用状況が表示されます。 。また、`/system/df` は Docker API エンドポイントであり、API を呼び出して関連情報を取得する必要があります。返される結果は「docker system df」に似ていますが、Docker システムのリソース使用量をプログラムで取得する場合により適しています。

質問内容

Dockerホストから総ディスク使用量をGB単位で取得するプログラムをGoで書いています。このために、go lib の func DiskUsage() を使用します:

  • https://pkg.go.dev/github.com/docker/docker/client#Client.DiskUsage。

コードを表示します。関数は Docker API エンドポイント /system/df:

を呼び出しています。
  • https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemDataUsage

ただし、コマンド docker system df を使用して GB を計算するこのライブラリを使用すると、奇妙な動作に気づきました:

  • docker システム df出力: リーリー
  • My Go アプリケーションの出力: リーリー

ご覧のとおり、2 つの出力には違いがあります。 /system/df エンドポイントからデータを取得する計算に何か問題があるかどうかを理解する必要があります。 ###ありがとう:)### Go アプリケーション:

$ docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          223       4         21.02GB   20.7GB (98%)
Containers      6         0         0B        0B
Local Volumes   13        1         536.4MB   340.4MB (63%)
Build Cache     954       0         13.51GB   13.51GB

ソリューション

Docker ソース コードに基づく:

    system df
  • コマンド: https://github.com/docker/cli/blob/v24.0.5/cli/command/system/df.go 出力形式:
  • https://github.com/docker/cli/blob/v24.0.5/cli/command/formatter/disk_usage.go
  • 次のコードを使用すると、
docker system df

の動作を正確に再現できるはずです:

    go.mod
  • リーリー
    main.go
  • リーリー
画像の場合、
    docker
  • ライブラリは合計サイズを表す diskUsage.LayersSize を直接提供するため、自分で計算する必要はありません ビルド キャッシュの場合、共有プロジェクトを除外する必要があります (
  • if !bc.Shared
  • )
  • サイズを正しい単位に変換するには、
github.com/docker/go-units

(例: units.HumanSize(float64(diskUsage.LayersSize)) を使用することを強くお勧めします。 )。これで単位変換の悪夢から解放されます。

以上が`docker system df` および `/system/df` (docker API エンドポイント)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。