【问题标题】:Docker image sizeDocker 镜像大小
【发布时间】:2015-12-06 04:34:30
【问题描述】:

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

【问题讨论】:

  • 你能提供更多细节吗?复制者?
  • Docker Hub上列出的标签大小是压缩大小。图像会压缩发送给您,并在拉取到本地服务器后解压缩,并且会比列出的要大得多。
  • 您可以使用github.com/wemake-services/docker-image-size-limit 来检查您的图片尺寸是否过大。

标签: docker


【解决方案1】:

有几种方法可以实现这一点,具体取决于您查询的存储库。

TLDR;请参阅此回购:schnatterer/docker-image-size

详情:

前两个适用于 DockerHub 并返回相同大小的测试图像 debian:stretch-20190204-slim on 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 hub 查询详细清单
  • jq '.[] | select(.Descriptor.platform.architecture == "amd64").SchemaV2Manifest.layers[0].size - 过滤所有层的压缩大小(字节)
  • + 500000 - 用于舍入
  • /1000 - 划分为 KB/MB

注册

需要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

更多注册表示例:

【讨论】:

    【解决方案2】:

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

    要检查的问题是:

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

    对于最后一点,如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,这是一个 docker 版本问题:升级到 1.9.1 会有所帮助。

    【讨论】:

    • 1.百胜安装泊坞窗
    • @DragomirAdrian yum 安装了哪个版本的 docker?
    • 1. yum 安装 docker Docker 版本 1.8.2,构建 bb472f0/1.8.2 内核版本 3.10.0-229.20.1.el7.x86_64 2. - docker login - docker pull [image] Docker 公共集线器上的图像大小为 494 MB - docker images 图像大小为 1582 MB - 创建一个私有 Docker 存储库 - docker tag [image] username/[repository name] - docker push username/[repository name] 在 Docker 私有存储库上我现在有一个 2 GB 大小的图像测试 3 4.存储驱动已经是devicemapper
    • @DragomirAdrian 好的。首先,将所有内容升级到最新版本。码头工人 1.9.1。
    • 最后我升级到了 1.9.1 版本,我重复了这个过程。 Docker 镜像的大小现在是正确的,谢谢。我还有一个问题:为什么显示我通过互联网推送 1.6 GB 而 Docker 映像是 494 MB?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 2018-12-21
    • 2017-01-22
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多