在拉动之前获取Docker图像的大小?

时间:2015-10-26 18:20:35

标签: docker boot2docker

如何将之前的Docker镜像的大小拉到自己的机器上?

5 个答案:

答案 0 :(得分:4)

在Docker中搜索docker镜像时,会有2个制表符 - Repo InfoTags。打开“标签”选项卡,您将看到可以为该图像提取的所有图像类型的大小。

答案 1 :(得分:2)

Docker Hub

获取图像特定标签的压缩大小(以字节为单位)。

# for an official image the namespace is called library
curl -s https://hub.docker.com/v2/repositories/library/alpine/tags | \
    jq '.results[] | select(.name=="latest") | .full_size'

# 2796860

# here the project namespace is used
curl -s https://hub.docker.com/v2/repositories/jupyter/base-notebook/tags | \
    jq '.results[] | select(.name=="latest") | .full_size'

# 187647701

获取特定体系结构/操作系统的图像标签的压缩大小(以字节为单位)。

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

# 2796860

# selecting an architecture and a specific os
curl -s https://hub.docker.com/v2/repositories/library/hello-world/tags | \                                                                                         
    jq '.results[] | select(.name=="latest") | .images[] | select (.architecture=="amd64" and .os=="linux") | .size'

# 2529

替代

另一种方法是使用实​​验性docker manifest inspect命令。优点是它不依赖Docker Hub,它与其他注册表一样工作,因为它基于Image Manifest specification

# activate experimental mode
export DOCKER_CLI_EXPERIMENTAL=enabled 

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

# 2796860

# need to sum if multiple layers
docker manifest inspect jupyter/base-notebook:latest | \
    jq '[.layers[].size] | add'

# 187647701

答案 2 :(得分:1)

  1. 对于Docker Hub上的图像:
curl -s -H "Authorization: JWT " "https://hub.docker.com/v2/repositories/library/<image-name>/tags/?page_size=100" | jq -r '.results[] | select(.name == "<tag-name>") | .images[0].size' | numfmt --to=iec-i
  1. 用于其他注册表(如Microsoft Container Registry)上的图像。我想出了三种方法。

    • 使用docker manifest inspect观察清单数据,这可以使您了解如何获得图像的压缩大小。

    docker manifest inspect -v <registry-domain>/<image-name> | grep size | awk -F ':' '{sum+=$NF} END {print sum}' | numfmt --to=iec-i
    

    要启用docker manifest inspect,请编辑~/.docker/config.json文件并将experimental设置为enable。(参考:docker manifest inspect

    • 将图像推送到Docker Hub,您可以在Docker Hub网站上获取图像的压缩大小。

    • 使用docker save将图像保存到.tar文件,然后将其压缩为.tar.gz文件。

docker save my-image:latest > my-image.tar

# Compress the .tar file
gzip my-image.tar

# Check the size of the compressed image
ls -lh my-image.tar.gz

答案 3 :(得分:0)

Docker镜像有很多层,因此总图像大小取决于图像使用的层数。

来自Image Layers

Century Link Labs来自Docker注册表中可视化图像及其图层(包括总大小)的好工具

Github:imagelayers-graph

答案 4 :(得分:0)

如果您真的查看了停靠操作的docker代码,我认为您的答案就在那里。如果没有缓存容器的图像,那么在拉动图像期间,docker首先从注册表中收集有关图像的信息,如层数,每层的大小等等。

我会参考阅读此文件。

https://github.com/moxiegirl/docker/blob/master/distribution/xfer/download.go