dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2198
  • 铜币14124枚
  • 威望6134点
  • 银元155个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:978回复:0

Docker 镜像体积问题

楼主#
更多 发布于:2018-01-23 10:30
开始之前
如果仔细观察你会发现,Docker宿主机中某个镜像所占用的磁盘空间和在 Docker Hub(仓库)上看到的镜像大小是不同的,例如 `golang:1.9` 在 Docker Hub (仓库)显示的是 `272MB`,而镜像下载后`docker image ls` 命令给出的却是 `733MB` 。

这是因为 Docker Hub (仓库)中显示的大小是压缩后的体积,在**镜像下载和上传过程中镜像是保持压缩状态**的,以保证能够更快速的下载或上传镜像,而 `docker image ls` 命令是镜像下载到本地展开后的各层所占空间的总和。

Unino FS
Docker **镜像是多层存储结构,并且可以继承、复用**,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。`docker image ls` 命令列出的镜像体积总和并非是所有镜像实际消耗硬盘空间,因为基于 `Union FS`技术(联合文件系统),相同的层只需要保存一份即可,所以实际镜像硬盘使用空间可能要比这个小的多。

可以通过以下命令来查看镜像、容器、数据卷所占用的空间。
docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              52                  0                   9.846GB             9.846GB (100%)
Containers          0                   0                   0B                  0B
Local Volumes       0                   0                   0B                  0B

命令帮助
docker system  --help
Usage:    docker system COMMAND
Manage Docker
Options:
      --help   Print usage
Commands:
  `df`        Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

# 省略...
注意,docker 1.13.1(含) 后版本支持  system 子命令。

小结
最后来总结下文章中的知识点
- Docker仓库**侧重点是网络**,镜像下载和上传过程中镜像始终保持压缩状态。
- 由于 `Union FS`的特性,不同docker镜像可能会使用相同的基础镜像,`doker images`命令列出的镜像体积总和并不能代表实际使用的磁盘空间,需要使用 `docker system df` 命令来代替。

#
欢迎关注微信公众号: 运维录
游客

返回顶部