列出镜像
列出本地镜像
想要列出已经下载下来的镜像,使用 docker images
列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。镜像 ID 是镜像的唯一标识,一个镜像可以对应多个标签。
镜像体积
我们可能会注意到,下载下来的镜像大小和在 Docker Hub 上看到的镜像大小不同。这是因为 Docker Hub 中显示的体积是压缩后的体积。在镜像下载和上传过程中是始终保持压缩状态的。而镜像在下载到本地后会展开大小。准确的说是展开后的各层所占空间的总和。因为镜像在下载到本地后,我们更关心的是本地磁盘占用空间的大小。
docker images 列表中的镜像总体积并非是所有镜像实际硬盘的消耗。由于 Docker 镜像是多层存储结构,并且可以继承、复用,因此不同镜像可能会因为使用相同的基础镜像,从而拥有共同的层。由于 Docker 使用 Union FS,相同的层只需要保存一份即可,因此实际镜像硬盘占用空间很可能要比这个列表镜像大小的总和要小的多。
你可以通过 docker system df
命令来便捷的查看镜像、容器、数据卷所占用的空间。
虚悬镜像
上面的镜像列表中,还可以看到一个特殊的镜像,这个镜像既没有仓库名,也没有标签,均为 <none>
。:
这个镜像原本是有镜像名和标签的,原来为 mongo:3.2
,随着官方镜像维护,发布了新版本后,重新 docker pull mongo:3.2
时,mongo:3.2
这个镜像名被转移到了新下载的镜像身上,而旧的镜像上的这个名称则被取消,从而成为了 <none>
。除了 docker pull
可能导致这种情况,docker build
也同样可以导致这种现象。由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 <none>
的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
一般来说,虚悬镜像已经失去了存在的价值,可以随意删除
中间层镜像
为了加速镜像构建、重复利用资源,Docker 会利用中间层镜像。所以在使用一断时间后,可能会看到一些依赖的中间层镜像。默认的 docker images 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像,需要加-a 参数。
这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。实际上,这些镜像也没必要删除,因为之前说过,相同的层只会存一遍,而这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份,无论如何你也会需要它们。只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。
列出部分镜像
列出特定的某个镜像,也就是说指定仓库名和标签
除此以外,docker image ls
还支持强大的过滤器参数 --filter
,或者简写 -f
。之前我们已经看到了使用过滤器来列出虚悬镜像的用法,它还有更多的用法。比如,我们希望看到在 mongo:3.2
之后建立的镜像,可以用下面的命令:
想查看某个位置之前的镜像也可以,只需要把 since
换成 before
即可。
此外,如果镜像构建时,定义了 LABEL
,还可以通过 LABEL
来过滤。
以特定格式显示
默认情况下,docker images
会输出一个完整的镜像列表内容,但有些时候我们并不需要全部信息。比如,刚才删除虚悬镜像的时候,我们需要利用 docker image ls
把所有的虚悬镜像的 ID 列出来,然后才可以交给 docker image rm
命令作为参数来删除指定的这些镜像,这个时候就用到了 -q
参数。
--filter
配合 -q
产生出指定范围的 ID 列表,然后送给另一个 docker
命令作为参数,从而针对这组实体成批的进行某种操作的做法在 Docker 命令行使用过程中非常常见,不仅仅是镜像,将来我们会在各个命令中看到这类搭配以完成很强大的功能。因此每次在文档看到过滤器后,可以多注意一下它们的用法。
比如,下面的命令会直接列出镜像结果,并且只包含镜像 ID 和仓库名:
或者打算以表格等距显示,并且有标题行,和默认一样,不过自己定义列:
最后更新于
这有帮助吗?