提交生成的新Docker镜像为何与原镜像大小一致?
问题解答
首先你没看错,docker images显示的确实不是实际磁盘占用——它列的是镜像的虚拟总大小,也就是把所有分层的大小加起来的总和,不管这些层是不是和其他镜像共享。
Docker用的是分层存储机制:你基于原镜像创建容器后做的修改,只会生成新的增量层,新镜像其实是原镜像的底层层加上你新增的层组合出来的,底层的未修改层是和原镜像共享的,不会重复占用磁盘空间。你看到两个镜像大小差不多,只是因为新镜像包含了原镜像所有层的大小,加上你新增的一点点内容,所以总虚拟大小接近,但实际磁盘上只多了你修改的那部分。
至于删不掉原镜像,是因为新镜像依赖原镜像的底层分层,Docker会自动跟踪每个分层的引用次数,只要还有镜像(或容器)在用到某个分层,就不会允许删除对应的父镜像,不然会导致新镜像的结构损坏。
想看实际磁盘占用的话,别用docker images,改用docker system df,这个命令会显示真实的磁盘使用情况,包括共享层节省的空间。如果要清理无用资源,可以用docker system prune -a,它会删掉所有没有被容器引用的镜像、悬空镜像等,释放真正没用的空间,但执行前要确认这些资源确实不需要了。
内容的提问来源于stack exchange,提问作者corazza
相关产品推荐
相关产品推荐

