多个镜像共用同一层,磁盘上到底占多少?docker images 里每个镜像都写着几十 MB,加起来是不是真实占用?这篇用 docker system df -v 的 SHARED / UNIQUE 两列实测。
只有基础镜像时:{'bwlab-c18base': ('55.5MB', '13.58MB', '41.96MB', '0')}
bwlab-c18z SIZE 57.6MB SHARED SIZE 55.53MB UNIQUE SIZE 2.104MB CONTAINERS 0
bwlab-c18y SIZE 57.6MB SHARED SIZE 55.53MB UNIQUE SIZE 2.104MB CONTAINERS 0
bwlab-c18x SIZE 57.6MB SHARED SIZE 55.53MB UNIQUE SIZE 2.104MB CONTAINERS 0
bwlab-c18base SIZE 55.5MB SHARED SIZE 55.53MB UNIQUE SIZE 1.512kB CONTAINERS 0
四个镜像的 SIZE 加起来 228.3 MB;基础镜像加上三个 UNIQUE SIZE 是 61.8 MB(这才是更接近真实占用的数字)docker system df -v 比 docker images 多了 SHARED SIZE 和 UNIQUE SIZE 两列。子镜像 x、y、z 各自 SIZE 57.6MB,其中 55.53MB 是与别的镜像共用的,只有 2.104MB 是自己独有的。基础镜像在有了子镜像以后,UNIQUE 掉到 1.512kB。
四个 SIZE 加起来 228.3 MB,而更接近真实占用的数字(基础镜像的 SIZE 加三个 UNIQUE SIZE)是 61.8 MB。估算镜像占了多少磁盘时,别把 docker images 的大小相加。我没有去磁盘上量字节数来核对 61.8 MB,它是 docker 自己的统计。
docker rmi bwlab-c18base → 退出码 0;输出:Untagged: bwlab-c18base:latest 剩下的镜像:['bwlab-c18x', 'bwlab-c18y', 'bwlab-c18z'] bwlab-c18x:SIZE 57.6MB SHARED 55.53MB UNIQUE 2.104MB 运行 x(仍可用?)退出码 0;1048576 字节
基础镜像的名字被 docker rmi 去掉后,子镜像的 SIZE、SHARED、UNIQUE 都没变,也能照常运行:被引用的层不会被删。
docker images 的 DISK USAGE 与 CONTENT SIZE:24.1MB / 9.34MB docker system df -v:SIZE 24.1MB,SHARED 13.58MB,UNIQUE 10.49MB
这个镜像存储下的 SIZE 把压缩内容和解包后的层加在一起(24.1MB 对压缩内容 9.34MB),所以它不是文件系统里文件的总大小。