我从Docker Hub上拉取了一个约0.5GB大小的Docker镜像。在我的Centos机器上拉取后,镜像的大小变成了1.6GB。使用新名称推送该镜像时,在Docker Hub上显示为2GB。 如何获得与Docker Hub上相同大小的镜像?
我从Docker Hub上拉取了一个约0.5GB大小的Docker镜像。在我的Centos机器上拉取后,镜像的大小变成了1.6GB。使用新名称推送该镜像时,在Docker Hub上显示为2GB。 如何获得与Docker Hub上相同大小的镜像?
debian:stretch-20190204-slim
返回相同的大小 on DockerHub。
我还没有找到针对quay.io和私有仓库的有效解决方案。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 文档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➜ 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/MBreg
和docker manifest
在某些其他存储库中无法直接使用。然而,这里可能只需要使用curl
。但是,对于Docker Hub来说,这会更加困难(因为我们需要一个令牌)。
➜ echo $(( ( $(curl -s https://gcr.io/v2/distroless/java/manifests/11-debug | \
jq '.layers[].size' \
| paste -sd+ | bc) \
+ 500000) \
/ 1000 \
/ 1000)) MB
69 MB
在Ubuntu上的docker 1.7.0中,有一个类似的问题(问题14204)报告过。
(而且默认情况下,CentOS可能没有最新版本的docker,所以第一步是升级如果可能的话)
需要检查的问题:
- 您是如何安装docker的?
- 您能提供重现该问题的步骤清单吗?
- 您能发布sudo du -sh /var/lib/docker/*的输出吗?
- 您正在使用devicemapper作为存储驱动程序,您可以尝试使用aufs吗?
对于最后一点,请参阅本文描述,检查/etc/default/docker
# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--storage-driver=devicemapper"
根据OP Dragomir Adrian在评论中的确认,问题出在Docker版本上:升级到1.9.1即可解决。