程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了获取 Docker 容器磁盘使用百分比大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决获取 Docker 容器磁盘使用百分比?

开发过程中遇到获取 Docker 容器磁盘使用百分比的问题如何解决?下面主要结合日常开发的经验,给出你关于获取 Docker 容器磁盘使用百分比的解决方法建议,希望对你解决获取 Docker 容器磁盘使用百分比有所启发或帮助; @H_696_2@Docker 系统 df 显示有关 docker 守护程序使用的磁盘空间量的信息。

TYPE                @R_632_10586@L               ACTIVE              SIZE                RECLaimABLE
Images              5                   2                   16.43 MB            11.63 MB (70%)
Containers          2                   0                   212 B               212 B (100%)
Local Volumes       2                   1                   36 B                0 B (0%)
@H_696_2@我想使用 Go Docker 客户端获取总磁盘使用量的百分比https://pkg.go.dev/github.com/docker/docker/client@H_197_10@

{
  "LayeRSSize": 1092588,"Images": [
    {
      "ID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749","ParentID": "","RepoTags": [
        "busyBox:latest"
      ],"RepoDigests": [
        "busyBox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6"
      ],"Created": 1466724217,"Size": 1092588,"SharedSize": 0,"VirtualSize": 1092588,"Labels": {},"Containers": 1
    }
  ],"Containers": [
    {
      "ID": "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148","names": [
        "/top"
      ],"Image": "busyBox","ImagEID": "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749","Command": "top","Created": 1472592424,"Ports": [],"SizeRootFs": 1092588,"State": "exited","Status": "Exited (0) 56 minutes ago","HostConfig": {
        "Networkmode": "default"
      },"NetworkSetTings": {
        "Networks": {
          "brIDge": {
            "IPAMConfig": null,"links": null,"Aliases": null,"NetworkID": "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92","EndpointID": "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a","Gateway": "172.18.0.1","Ipaddress": "172.18.0.2","IPPrefixLen": 16,"IPv6Gateway": "","GlobaliPv6Address": "","GlobaliPv6PrefixLen": 0,"MacAddress": "02:42:ac:12:00:02"
          }
        }
      },"Mounts": []
    }
  ],"Volumes": [
    {
      "name": "my-volume","Driver": "local","Mountpoint": "/var/lib/docker/volumes/my-volume/_data","Labels": null,"Scope": "local","Options": null,"UsageData": {
        "Size": 10920104,"RefCount": 2
      }
    }
  ]
}
@H_696_2@remote api 给出了 Json 数据。但我不确定如何从中获得确切的磁盘使用情况。

@H_696_2@以前有没有人做过这件事?

解决方法

@H_696_2@docker system df 命令仅以百分比形式打印可回收空间的大小。可回收是未使用的图像占用的空间,这是您可以在不破坏任何内容的情况下删除的图像的总大小。

@H_696_2@让我们看一下 docker CLI utility 的源代码,以更好地了解 docker system df 的作用。 df 的用法有两种上下文:用于 docker images 和用于 docker containers。源代码是不言自明的。对于容器,我们使用 SizeRw(已创建或更改的文件的大小,如果将容器与其基本映像进行比较)值来检测容器总大小与非活动容器总大小之间的百分比差异。对于 docker 镜像,我们会出于这些目的使用镜像的虚拟和共享大小进行操作。

@H_696_2@因此,根据您的问题,我假设 docker system df 给出的百分比数据并不是您真正需要的。据我了解,您希望获得所有容器或映像使用的总磁盘空间的百分比。

@H_696_2@这并不难做到。让我们获取总磁盘大小,从 docker 客户端获取 DiskUsage 结构体并评估所需的百分比:

package main

import (
    "context"
    "fmt"
    "os"

    "github.com/docker/docker/client"
    "golang.org/x/sys/unix"
)

func main() {
    wd,err := os.Getwd()
    if err != nil {
        panic(err)
    }

    // Get amount of free disk space
    var stat unix.Statfs_t
    unix.Statfs(wd,&stat)

    // Available blocks * size per block = available space in bytes
    avail := stat.bavail * uint64(stat.bsizE)

    // Create a docker client and request DiskUsage.
    // replace this code with your own.
    cli,err := client.NewClientWithOpts(client.FromEnv,client.WithAPIVersionNegotiation())
    if err != nil {
        panic(err)
    }
    du,err := cli.DiskUsage(context.BACkground())
    if err != nil {
        panic(err)
    }

    fmt.Printf("Available: %d bytes\n",avail)
    fmt.Printf("Space used: %f%%\n",100-((float64)((int64)(avail)-du.LayersSizE)/(float64)(avail))*100)
}
@H_696_2@我假设您使用的是 *nix 系统。对于 Windows,您可以使用 x/sys/windows 包获取磁盘空间总量。有关详细信息,请参阅 this answer。

@H_696_2@上面的代码打印了所有层使用的总磁盘空间的百分比。如果您需要特定容器或映像的信息,您可以使用 DiskUsage struct du 中描述的 in the API reference 字段。

@H_696_2@我希望您可以轻松地修改这个最小的示例以适合您的任务。

大佬总结

以上是大佬教程为你收集整理的获取 Docker 容器磁盘使用百分比全部内容,希望文章能够帮你解决获取 Docker 容器磁盘使用百分比所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:获取