大佬教程收集整理的这篇文章主要介绍了获取 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@以前有没有人做过这件事?
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,请注明来意。