如图,我的myshop
是使用Dockerfile
继承tomcat
的
docker system df
命令显示的占用内存大小和docker images
命令显示的不同
原因是因为,Docker被设计为分层存储的架构
简单来说,以我的myshop
镜像为例,myshop
是继承的tomcat
,Docker
会先构建tomcat
,之后在tomcat
基础上,将myshop
和tomcat
不一样的地方构建起来
所以其实myshop
和tomcat
的内存其实有一部分是通用的
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。1
李卫民 https://www.funtl.com/zh/docker/Docker-%E9%95%9C%E5%83%8F.html#%E5%88%86%E5%B1%82%E5%AD%98%E5%82%A8 ↩︎