Docker图像大小

时间:2015-12-06 04:34:31

标签: docker

我在Docker Hub上提取了大约0.5 GB的Docker镜像。在我的Centos机器上拉它后,图像的大小变为1.6 GB。使用新名称推送图像在Docker集线器上显示2 GB。 如何在Docker集线器上获取相同大小的图像?

2 个答案:

答案 0 :(得分:1)

issue 14204中报告了类似的问题,对于Ubuntu上的docker 1.7.0 (默认情况下,CentOS可能没有最新版本的docker,所以first step would be to upgrade if possible

要检查的问题是:

  
      
  1. 你是如何安装docker的?
  2.   
  3. 您能否列出重现问题的步骤?
  4.   
  5. 您可以发布sudo du -sh / var / lib / docker / *
  6. 的输出   
  7. 您正在使用devicemapper作为存储驱动程序,可以尝试使用aufs吗?
  8.   

最后一点,described in this article,请检查/etc/default/docker

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--storage-driver=devicemapper"

OP Dragomir Adrian确认in the comments时,它是一个泊坞版本问题:升级到1.9.1有帮助。

答案 1 :(得分:1)

有多种方法可以实现此目标,具体取决于您要查询的存储库。

前两个适用于DockerHub,并返回相同大小的测试映像debian:stretch-20190204-slim on DockerHub

Screenshot DockerHub

到目前为止,我还没有找到适用于quay.io和私有Repos的解决方案。

码头工人清单

需要jq

export DOCKER_CLI_EXPERIMENTAL=enabled

echo $(( ( $(docker manifest inspect -v docker.io/debian:stretch-20190204-slim \
              | jq '.[] | select(.Descriptor.platform.architecture == "amd64").SchemaV2Manifest.layers[0].size') \
           + 500000) \
         / 1000 \
         / 1000)) MB
23 MB

如果您关心细节:

  • export DOCKER_CLI_EXPERIMENTAL=enabled-docker manifest仍被认为是实验性的(从18.06.1-ce起)。可以在~/.docker/config.json中设为永久-请参见docker manifest | Docker Documentation
  • docker manifest inspect -v docker.io/debian:stretch-20190204-slim-从Docker中心查询详细清单
  • jq '.[] | select(.Descriptor.platform.architecture == "amd64").SchemaV2Manifest.layers[0].size-过滤所有层的压缩大小(字节)
  • + 500000-四舍五入
  • /1000-分为KB / MB

reg

需要regjq

➜ echo $(( ( $(reg manifest debian:stretch-20190204-slim |  \
            jq '.layers[].size' \
            | paste -sd+ | bc) \
           + 500000) \
         / 1000 \
         / 1000)) MB
23 MB

如果您关心细节:

  • reg manifest debian:stretch-20190204-slim-查询来自docker hub的清单
  • jq '.layers[].size'-过滤每层的压缩大小(字节)
  • paste -sd+ | bc-创建各个大小(字节)的总和
  • + 500000-四舍五入
  • /1000-分为KB / MB

卷曲

regdocker manifest在某些其他存储库中无法立即使用。 但是,curl可能就足够了。 OTOH,这对于docker hub有点困难(因为we need a token)。

➜ echo $(( ( $(curl -s https://gcr.io/v2/distroless/java/manifests/11-debug |  \
            jq '.layers[].size' \
            | paste -sd+ | bc) \
           + 500000) \
         / 1000 \
         / 1000)) MB
69 MB

其他注册表示例: