如何用Docker Scout查看镜像包大小及解析大小显示差异
如何使用Docker Scout获取Docker镜像的SBOM详情
执行命令:
docker scout sbom --format list cgr.dev/chainguard/wolfi-base
输出如下:
| Name | Version | Type |
|---|---|---|
| apk-tools | 2.14.4-r0 | apk |
| busybox | 1.36.1-r10 | apk |
| busybox | 1.36.1-r10 | apk |
| ca-certificates | 20240705-r0 | apk |
| ca-certificates-bundle | 20240705-r0 | apk |
| glibc | 2.40-r1 | apk |
| glibc | 2.40-r1 | apk |
| glibc-locale-posix | 2.40-r1 | apk |
| glibc-locale-posix | 2.40-r1 | apk |
| ld-linux | 2.40-r1 | apk |
| libcrypt1 | 2.40-r1 | apk |
| libcrypto3 | 3.3.1-r5 | apk |
| libssl3 | 3.3.1-r5 | apk |
| libxcrypt | 4.4.36-r7 | apk |
| openssl | 3.3.1-r5 | apk |
| wolfi-base | 1-r6 | apk |
| wolfi-baselayout | 20230201-r15 | apk |
| wolfi-keys | 1-r8 | apk |
| zlib | 1.3.1-r4 | apk |
问题1:如何在上述输出右侧添加额外列显示镜像包大小?
能不能通过bash管道命令从外部提取大小信息手动添加,或者用Docker Scout的额外命令实现?
解答
Docker Scout的sbom命令目前没有直接输出包大小的参数,但可以通过bash管道结合工具手动添加:
- 先让Docker Scout输出JSON格式的SBOM,方便后续处理:
docker scout sbom --format json cgr.dev/chainguard/wolfi-base > sbom.json - 利用
apk info命令获取每个包的大小——可以启动该镜像的临时容器来执行:docker run --rm -v "$(pwd)/sbom.json:/sbom.json" cgr.dev/chainguard/wolfi-base sh -c 'apk info -s $(jq -r '.artifacts[].name' /sbom.json) | awk "{print \$1, \$3}"' > package-sizes.txt - 最后用简单的脚本(比如Python或bash脚本)把SBOM数据和大小数据合并,生成带
Size列的表格。
另外也可以通过Wolfi的包仓库API查询每个包的大小,再和SBOM数据关联整合。
问题2:为何不同命令显示的镜像大小存在差异?
执行docker scout cves cgr.dev/chainguard/wolfi-base显示镜像总大小7.2MB,但docker image inspect显示"Size":15394739(约15.4MB),docker image ls也显示15.4MB,为啥Docker Scout显示的大小不一样?
解答
这是因为两类命令的大小计算逻辑完全不同:
docker image ls和docker image inspect统计的是镜像在本地磁盘的实际占用大小,包含所有镜像层、元数据,还有层之间的共享数据,而且是未压缩的存储体积。- Docker Scout显示的是镜像中所有软件包的压缩后体积总和,也就是Wolfi仓库里这些apk包的压缩大小,它只算应用层的软件包本身,不包含镜像元数据、共享层,用的是包的压缩态数值,所以比本地存储的大小小很多。
内容的提问来源于stack exchange,提问作者Inspiraller
相关产品推荐
相关产品推荐

