如何通过docker API正确获取docker镜像的总大小?

2024-03-23

我想通过docker API获取docker镜像的总大小,例如GET /v2/<name>/manifests/<reference>这是这里描述的码头规范 https://docs.docker.com/registry/spec/api/#pulling-an-image-manifest

我得到了一个具有大小的图层列表,例如这个example https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#image-manifest,我将这些尺寸相加,但得到的数字小于docker images命令 show,据我所知,docker 注册表将这些层文件存储为 gzipped tar 文件,因此这个总和应该小于显示的大小docker images命令。

如何通过docker API正确获取镜像总大小? 我想要得到相同的尺寸docker images命令显示。


TLDR

尺寸由下式给出docker images is the 未压缩的大小安装的映像的locally,你只能得到从注册表的大小压缩图像(对于每个架构以及如果您想要每个层)。

来自本地图像

尺寸由下式给出docker images is the 系统上图像的未压缩大小.

# getting the size of alpine:latest
docker images alpine:latest --format "{{.Repository}}:{{.Tag}} -> {{.Size}}"

# alpine:latest -> 5.57MB

如果您下载图像,您可以获得相同的信息locally通过使用docker inspect命令。

docker inspect alpine:latest | jq '.[].Size' 

# 5573013

从注册表

据我所知你只能得到来自注册表的图像的压缩大小.

curl -s https://hub.docker.com/v2/repositories/library/alpine/tags/ | \
        jq '.results[] | select(.name=="latest") | .full_size'

# 2796860

事实上,注册表可以给出图像的大小每个架构.

curl -s https://hub.docker.com/v2/repositories/library/alpine/tags/ | \
        jq '.results[] | select(.name=="latest") | .images[] | {architecture: .architecture, size: .size}'

# {
#   "architecture": "arm",
#   "size": 2405675
# }
# {
#   "architecture": "arm",
#   "size": 2601912
# }
# {
#   "architecture": "386",
#   "size": 2791407
# }
# {
#   "architecture": "s390x",
#   "size": 2565829
# }
# {
#   "architecture": "ppc64le",
#   "size": 2803218
# }
# {
#   "architecture": "amd64",
#   "size": 2796860
# }
# {
#   "architecture": "arm64",
#   "size": 2706555
# }

您甚至可以获取详细信息每层的压缩大小通过使用docker manifest inspect实验命令。

# activate experimental mode
export DOCKER_CLI_EXPERIMENTAL=enabled 

docker manifest inspect -v alpine:latest | \
       jq '.[] | select(.Descriptor.platform.architecture=="amd64") | .SchemaV2Manifest.layers[].size'

# 2796860

如果有多个层,您可以将它们相加。这是一个例子jupyter/base-notebook:latest

# getting the size through the API
curl -s https://hub.docker.com/v2/repositories/jupyter/base-notebook/tags | \ 
        jq '.results[] | select(.name=="latest") | .full_size'

# 187647701

# summing each layer
docker manifest inspect jupyter/base-notebook:latest | jq '[.layers[].size] | add' 

# 187647701
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过docker API正确获取docker镜像的总大小? 的相关文章

随机推荐

  • 如何检测 Horizo​​ntalScrollView 内的视图何时接触另一个视图?

    所以我试图创建像滚动视图一样的 iMovie 我想在滚动视图内的图像触摸白线时得到回调 这样我就可以更改大图像 我怎样才能做到这一点 这个解决方案对我有用 也是我在对 Horizo ntalScrollView 的选项进行长期研究后能够找到
  • 龙卷风只能升级到websocket错误

    我正在使用龙卷风进行实时应用 我正在为此使用 Redis 当我访问网址时127 0 0 1 8888 2 其中 2 是我的用户 ID 我收到错误消息can Upgrade only to websocket 我不知道为什么我会收到此错误 这
  • 处理“javax/xml/XMLConstants.class”时出现问题

    我正在启动一个新的 Android 项目 该项目引用了一个第三方 JAR 而该第三方 JAR 又引用了其他 4 个 JAR ws commons java5 1 0 1 jar ws commons util 1 0 2 jar xmlrp
  • as3 AIR for android - 应用程序沙箱内容错误

    目标 我试图允许外部加载的 swf 文件与从设备本地加载的文件相互通信 我需要能够访问变量 函数和对象 我在从网上加载 swf 内容时已经实现了这一点 as3 从网络外部加载的swf 控制从网络外部加载的swf https stackove
  • 如何在 Spark 中从文本文件创建 DataFrame

    我在 HDFS 上有一个文本文件 我想将其转换为 Spark 中的数据帧 我正在使用 Spark 上下文加载文件 然后尝试从该文件生成各个列 val myFile sc textFile file txt val myFile1 myFil
  • PHP PDO 数据库错误特殊字符

    我已经阅读了有关这种情况的大部分问题和答案 但我无法解决我的性格问题 我的数据库的默认字符集是utf8 所有表的排序规则是utf8 general ci 我确信所有设置都是 utf8 和 utf8 general ci 因为我已经检查了它们
  • 春天有像温莎城堡里的@predestroy 这样的东西吗

    任何类似的东西 PreDestroy在弹簧框架中 如果您定义了一个实现 DisposableBean 接口的 bean 那么 Spring 将调用 void destroy throws Exception 销毁 Bean 之前的方法 这是
  • Python 3 中未解决的全局变量引用

    所以 我不知道为什么 但我在以下函数中收到来自 Pycharm 的 未解析的引用 警告 它们的共同点是运算中也使用了赋值变量 我不明白为什么这行不通 对于警告的内容有什么想法吗 我确实读过这个线程 PyCharm 中未解决的参考问题 htt
  • py2exe 未找到所有依赖项

    我正在尝试从 python 代码创建一个 exe 我可以从命令行很好地运行代码 如下所示 python myScript py 我从这里安装了 py2exe http sourceforge net projects py2exe file
  • 事务内部只允许Ancestor查询,如何处理?

    我需要在 a 内进行查询Transaction 但是我不知道实体 Id 我拥有的是一个字段的值 例如用户名 但不是ID 换句话说 我无法创建一个Key进行查询 我如何进行查询以获取实体内的实体Transaction 在不深入研究更深层次的设
  • 如何从 C++ Windows 客户端使用 ETW

    我正在研究Windows 事件跟踪 https learn microsoft com en us windows hardware test wpt event tracing for windows ETW 允许用户模式 Windows
  • 我如何退出我的应用程序?

    我如何退出我的应用程序 我希望当用户单击按钮时 该应用程序将完全退出 我看到了任何有关它的答案 但他们将该应用程序带到了后端 我想彻底退出 在这个方法中你可以调用exit 在任何地方运行并退出应用程序 所以要随时关闭应用程序 请使用FLAG
  • 查找目录中的文件数

    Linux 中是否有任何方法可以在 O 1 内计算目录 即直接子级 中的文件数 与文件数无关 而不必先列出目录 如果不是 O 1 是否有一种相当有效的方法 我正在寻找替代方案ls wc l readdir 并不像您想象的那么昂贵 诀窍是避免
  • C#:如何使用 directshow.net 显示此对话框?

    如何使用 Directshow net 调用此对话框 过滤图 https stackoverflow com questions 4680606 c how to open configuration pin dialog 假设您有 IBa
  • C语言中如何释放内存?

    我正在编写具有大量一维和二维数组的代码 我收到 错误 无法分配区域 我认为这是因为分配了太多内存 我使用 malloc 和 free 函数 但我不确定我是否正确使用它们 也许你知道我在哪里可以看到关于 C 内存管理的好例子 所以 我只是想让
  • 没有可用于离线模式的缓存版本 Gradle 插件

    我有一段时间没有使用 Android Studio 但决定更新所有内容并创建一个新项目 如果我转到 首选项 gt 构建 执行 部署 gt Gradle 我会收到上述错误 没有像其他地方建议的那样 离线工作 选项没有可用于离线模式的 grad
  • 绑定 IList 不显示 IMyInterface 继承的接口成员

    我将 IList 绑定到 GridView IMyInterface 看起来像 public interface IMyInterface IHasTotalHours IHasLines DateTime GoalStartDate ge
  • SQL Server 列的层次总和

    我按照图表设计了数据库 Category表是自引用父子关系 Budget将为每个类别定义所有类别和金额 Expense表将包含已花费金额的类别条目 考虑Total此表中的列 我想编写选择语句来检索具有以下给出的列的数据集 ID Catego
  • 将 ActionBar 添加到 Android API Level 8 应用程序?

    我知道互联网上有很多关于如何做到这一点的零碎材料 但我请求有人给我一个逐步指南 告诉我如何从一开始就如何添加库 将代码添加到我的 Android 应用程序 项目 我喜欢这个的外观 https github com johannilsson
  • 如何通过docker API正确获取docker镜像的总大小?

    我想通过docker API获取docker镜像的总大小 例如GET v2