cari
Rumahpembangunan bahagian belakangGolang`docker system df` dan `/system/df` (docker api endpoint)

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

editor php Yuzai di sini untuk memperkenalkan kepada anda dua arahan dalam docker: `docker system df` dan `/system/df` (docker api endpoint). Kedua-dua arahan digunakan untuk melihat penggunaan sumber sistem docker, tetapi kaedah penggunaan dan paparan hasilnya sedikit berbeza. `sistem docker df` ialah arahan docker yang boleh dijalankan terus dalam terminal Ia akan memaparkan penggunaan pelbagai sumber (termasuk imej, bekas, volum data, dll.) dalam sistem docker, serta penggunaan sumber keseluruhan. . Dan `/system/df` ialah titik akhir API docker, dan anda perlu mendapatkan maklumat yang berkaitan dengan memanggil API. Hasil pulangannya adalah serupa dengan `sistem docker df`, tetapi ia lebih sesuai untuk mendapatkan penggunaan sumber sistem docker secara pemrograman.

Kandungan soalan

Saya sedang menulis program dalam Go untuk mendapatkan jumlah penggunaan cakera dalam GB daripada hos docker saya. Untuk ini saya menggunakan func DiskUsage() dari go lib:

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

Melihat kod, fungsi memanggil titik akhir api docker /system/df:

  • https://docs.docker.com/engine/api/v1.43/#tag/System/operation/SystemDataUsage

Walau bagaimanapun, apabila saya menggunakan perpustakaan ini dengan mengira GB menggunakan arahan docker system df, saya melihat tingkah laku pelik:

  • docker系统dfOutput:
    $ 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
    
  • Output aplikasi My Go:
    $ go run ./cmd/main.go
    Images: TOTAL (223), 17GB
    Build Cache: TOTAL (954), 29GB
    

Seperti yang anda lihat, terdapat perbezaan antara kedua-dua output. Saya memerlukan bantuan untuk memahami jika terdapat kesilapan dengan pengiraan saya yang mendapat data daripada /system/df titik akhir. Terima kasih :)

Apl Go:

package main

import (
    "context"
    "fmt"

    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
)

func main() {
    cli, err := client.NewClientWithOpts(client.FromEnv)
    if err != nil {
        panic(err)
    }

    diskUsg, err := cli.DiskUsage(context.Background(), types.DiskUsageOptions{})
    if err != nil {
        panic(err)
    }
    b := float64(0)
    for _, ch := range diskUsg.BuildCache {
        b = b + float64(ch.Size)
    }

    b2 := float64(0)
    for _, ch := range diskUsg.Images {
        if ch.Size > ch.SharedSize {
            b2 = b2 + (float64(ch.Size) - float64(ch.SharedSize))
            continue
        }
        b2 = b2 + (float64(ch.SharedSize) - float64(ch.Size))
    }

    fmt.Printf("Images: TOTAL (%d), %2.fGB\n", len(diskUsg.Images), float64(b2)/(1<<30))
    fmt.Printf("Build Cache: TOTAL (%d), %2.fGB\n", len(diskUsg.BuildCache), float64(b)/(1<<30))
}

Penyelesaian

Berdasarkan kod sumber Docker:

Anda sepatutnya dapat menghasilkan semula dengan tepat apa yang docker 系统 df lakukan menggunakan kod berikut:

  • go.mod
module 76982562-docker-system-df-vs-system-df-docker-api-endpoint

go 1.21.0

require (
    github.com/docker/cli v24.0.5+incompatible
    github.com/docker/docker v24.0.5+incompatible
)
  • main.go
<code>package main

import (
    "context"
    "fmt"
    "os"

    "github.com/docker/cli/cli/command/formatter"
    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
    "github.com/docker/go-units"
)

func main() {
    cli, err := client.NewClientWithOpts(client.FromEnv)
    if err != nil {
        panic(err)
    }

    diskUsage, err := cli.DiskUsage(context.Background(), types.DiskUsageOptions{})
    if err != nil {
        panic(err)
    }

    var bsz int64
    for _, bc := range diskUsage.BuildCache {
        if !bc.Shared {
            bsz += bc.Size
        }
    }

    fmt.Printf("Images: TOTAL (%d), %s\n", len(diskUsage.Images), units.HumanSize(float64(diskUsage.LayersSize)))
    fmt.Printf("Build Cache: TOTAL (%d), %s\n", len(diskUsage.BuildCache), units.HumanSize(float64(bsz)))
}
</code>
  • Untuk imej, docker库直接提供了diskUsage.LayersSize mewakili jumlah saiz, jadi anda tidak perlu mengiranya sendiri
  • Untuk cache binaan anda perlu mengecualikan projek kongsi (if !bc.Shared)

Untuk menukar saiz dalam unit yang betul, saya sangat mengesyorkan menggunakan github.com/docker/go-units (例如 units.HumanSize(float64(diskUsage.LayersSize))). Ini akan menyelamatkan anda mimpi ngeri penukaran unit!

Atas ialah kandungan terperinci `docker system df` dan `/system/df` (docker api endpoint). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:stackoverflow. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Membina sistem berskala dengan bahasa pengaturcaraan GoMembina sistem berskala dengan bahasa pengaturcaraan GoApr 25, 2025 am 12:19 AM

Goisidealforbuildingscalablesystemsduetoitssimplicity, ecurciency, dan barangan-inconcurrencysupport.1) go'ScleansyntaxandminimalisticdesignenhanceProductivityandreduceerrors.2)

Amalan terbaik untuk menggunakan fungsi init dengan berkesan di GOAmalan terbaik untuk menggunakan fungsi init dengan berkesan di GOApr 25, 2025 am 12:18 AM

InitFunctionsingorunautomaticallybeforemain () andareuseforforsettingupenvironmentsandinitializingvariables.usethemforsimpletasks, mengelakkansidefefects, andbecautiouswithtestingandloggingtomaintaincodeclarityAndestability.

Perintah pelaksanaan fungsi init dalam pakej GoPerintah pelaksanaan fungsi init dalam pakej GoApr 25, 2025 am 12:14 AM

GoinitializespackagesintheordertheyareImported, thenexecutesinitfunctionswithinapackageintheirdefinitionorder, danfilenamesdeterminetheorderacrossmultiplefiles

Menentukan dan menggunakan antara muka tersuai di GOMenentukan dan menggunakan antara muka tersuai di GOApr 25, 2025 am 12:09 AM

CustomInterfacesingoarecrucialForWritingFlexible, diselenggara, danTestableCode.theYenabledEveloperStofocusonbehavioroverImplementation, enhancingmodularityandrobustness.bydefiningmethodsignaturesthattypesmustimplement, interfacesallowforcorcodforcodforcodforcodforcodforcodforcodforcodeShorcodeShorcodforcodforcodeShorcodeShorcodeShorcodeShorcodeShorcodeAdeShorcodeShorcodeSoUsVorcoShorcodeS

Menggunakan antara muka untuk mengejek dan menguji di GOMenggunakan antara muka untuk mengejek dan menguji di GOApr 25, 2025 am 12:07 AM

Alasan untuk menggunakan antara muka untuk simulasi dan ujian adalah bahawa antara muka membolehkan definisi kontrak tanpa menentukan pelaksanaan, menjadikan ujian lebih terpencil dan mudah dikekalkan. 1) Pelaksanaan antara muka yang tersirat menjadikannya mudah untuk membuat objek mengejek, yang dapat menggantikan pelaksanaan sebenar dalam ujian. 2) Menggunakan antara muka dengan mudah boleh menggantikan pelaksanaan sebenar perkhidmatan dalam ujian unit, mengurangkan kerumitan ujian dan masa. 3) Fleksibiliti yang disediakan oleh antara muka membolehkan perubahan dalam tingkah laku simulasi untuk kes ujian yang berbeza. 4) Antara muka membantu reka bentuk kod yang boleh diuji dari awal, meningkatkan modulariti dan mengekalkan kod.

Menggunakan init untuk permulaan pakej di GoMenggunakan init untuk permulaan pakej di GoApr 24, 2025 pm 06:25 PM

Di GO, fungsi INIT digunakan untuk permulaan pakej. 1) Fungsi init secara automatik dipanggil apabila permulaan pakej, dan sesuai untuk memulakan pembolehubah global, menetapkan sambungan dan memuatkan fail konfigurasi. 2) Terdapat pelbagai fungsi init yang boleh dilaksanakan dalam urutan fail. 3) Apabila menggunakannya, perintah pelaksanaan, kesukaran ujian dan kesan prestasi harus dipertimbangkan. 4) Adalah disyorkan untuk mengurangkan kesan sampingan, menggunakan suntikan ketergantungan dan penangguhan permulaan untuk mengoptimumkan penggunaan fungsi INIT.

Pernyataan Pilih Go: Pelbagai operasi serentakPernyataan Pilih Go: Pelbagai operasi serentakApr 24, 2025 pm 05:21 PM

Go'sSelectStatementStreamLinesConcurrentProgrammingByMultiPlexingOperations.1) itAllowSwaitingonMultiPlechannoPerations,

Teknik Konvensyen Lanjutan di GO: Konteks dan WaitgroupsTeknik Konvensyen Lanjutan di GO: Konteks dan WaitgroupsApr 24, 2025 pm 05:09 PM

ContextandWaitGroupSarecrucialingingoformanagingGoroutinesfectively.1) ContextAllowsSignalingCancellationandDeadlinesacrosapiboundaries, memastikangoroutinescanbestplygracely.2) WaitgroupSsynchronizegoroutine, Mempersembahkan CreationAllcebeBefefeSproprophering, Preveation

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular