docker镜像是一个特殊的文件系统。
本篇文章将介绍如何docker镜像的层级结构,同时学习如何查看中间层镜像。
docker的原理
Docker 的镜像就是它的文件系统,一个镜像可以放在另外一个镜像的上层,那么位于下层的就是它的父镜像。所以,Docker 会存在很多镜像层,每个镜像层都是只读的,并且不会改变。当我们创建一个新的容器时,Docker 会构建出一个镜像栈,并在栈的最顶层添加一个读写层,如图所示。
其中中间的这些镜像层就是intermediate image,是不能被删除的。
如何查看中间层镜像
1 | //查看镜像 |
带参数a选项的命令输出的结果中含有none:none标签的镜像都是intermediate image(中间层镜像),这些镜像会被其他镜像所使用,是不能被随意删除的。
none:none 标签镜像
具有none:none 标签的景象都是intermediate image吗? 其实不是,还有一类镜像是dangling image(悬虚镜像),通过
1 | docker image ls |
命令展示出来的镜像也会包含none:none标签的镜像,这就是dangling image.
那么dangling image是如何产生的呢?
比如我们最开始通过如下命令构造一个名称为test:v1的镜像,
1 | docker build -t test:v1 . |
然后我们后期对代码进行了修改,所以我们会重新构造一个镜像。
1 | docker build -t test:v1 . |
我们没有为它分配新的名字,新构造的镜像还是叫做test:v1。这个时候原来的test:v1就会成为dangling image,根本没用,而且会占用存储空间。
可以通过如下命令将所有的玄虚镜像删掉。
1 | docker image prune |
写在最后
记得多关注一下docker的help文档,以查看镜像命令为例
1 | ➜ log docker image ls --help |
可以看到-a选项后面说,默认是隐藏intermediate images的。所以我们就可以了解到存在intermediate images 而且还可以通过在原命令的后面加参数a来查看中间层镜像。
更细节的原理可以查看这篇文章What are Docker