这是使用docker必会的一条命令,列出本地所有镜像。下面详细讲解。
命令:
docker image ls
描述:
列出镜像。
用法:
docker image ls [OPTIONS] [REPOSITORY[:TAG]]
别名:
docker image list、docker images(docker的一些命令可以简写,docker image list、docker images和docker image ls是等价的)
选项:
选项 | 描述 |
---|---|
-a, –all | 显示所有镜像(默认隐藏中间层镜像) |
–digests | 显示摘要 |
-f, –filter | 根据提供的条件过滤输出 |
–format | 使用自定义模板格式化输出: ‘table’:以表格格式打印输出,包含列标题(默认) ‘table TEMPLATE’:使用给定的Go模板以表格格式打印输出 ‘json’:以JSON格式打印 ‘TEMPLATE’:使用给定的Go模板打印输出。 有关使用模板格式化输出的更多信息,请参考 Format command and log output | Docker Docs |
–no-trunc | 不截断输出 |
-q, –quiet | 仅仅显示镜像的ID |
示例:docker images
如图所示,最普通不过的不加任何选项的docker images列出本机所有镜像,分为5列。分别是REPOSITORY、TAG、IMAGE ID、CREATED、SIZE。
REPOSITORY:仓库镜像名称,从Docker Hub下载的镜像名称或用户自定义编译出的镜像名称。
TAG:标签。镜像版本标签,未定义默认显示latest,代表最后的版本。
IMAGE ID:镜像ID。docker系统分配的ID,属于截断的ID,实际上的ID比这个更长。
CREATED:创建信息。一般显示镜像创建时离当下经过多少时间。
SIZE:硬盘容量大小。硬盘中占用空间大小。
选项示例1:-a、–all
在我的环境下,使用该选项和不使用,结果相同。但并不是说,这个选项无用。
一些Docker镜像具有中间层,这些中间层增加了可重用性,减少了磁盘使用,并通过允许每个步骤被缓存来加速Docker构建。这些中间层默认是不显示的。只有使用该选项,才会显示。要设置缓存加速,需要使用docker build。这个命令后面会讲,这里就不啰嗦了。
选项示例2:–digests
上图所示,列出的镜像列表多了一个DIGEST列,以sha256:开头。
官方对此的说法是:
使用v2或更高版本的格式的镜像有一个称为摘要的内容可寻址标识符。只要生成镜像的输入保持不变,摘要值就是可预测的。
当向2.0版本的注册表推送或拉取时,推送或拉取命令的输出包括镜像的摘要。您可以使用摘要值来拉取。您还可以在创建、运行和删除镜像的命令中使用摘要来引用,以及在Dockerfile中的FROM镜像引用中使用摘要。
参照官网docker image rm | Docker Docs的例子,我以此方法删除hello-world这个小镜像,如下所示
居然结果只是删除了hello-world的摘要。因此,不要指望通过摘要信息来删除镜像。
那么摘要信息是否有用呢?
我们在使用Harbor镜像仓库时,会发现仓库中存放的镜像会有一个Artifacts列,其实这就是摘要。
我们在开发中,有时候会一次将几个镜像一起打包。而其中可能只有部分镜像有改动。但jenkins设置好每次按照最新版本的数字打包,这时候摘要信息就大有用途了。
上图所示,Harbor镜像显示,第一行实际上是同一份镜像,由摘要信息决定,它们的版本号分别是v60~v62,但摘要信息只是sha256:7f46cdfa。当我们在docker pull时,指定摘要,而不是标签,可以只下载一份。如下图所示:
由于是项目镜像,关键信息全部马赛克处理,见谅见谅。最后,使用该选项进行本地镜像查看,结果如下:
使用摘要拉取镜像,标签部分将以none代替。
另外,摘要信息是在docker push时,添加上去的。下图是从jenkins编译时操作截图。
这样,我们就知道了该镜像的摘要信息,从而docker pull时就可以使用了。
选项示例3:-f, –filter
这个选项的内容需要key-value的形式,如果大于一组key-value,则需要多个–filter选项。
目前支持的过滤器有:
dangling(boolean – true or false) – 是否显示未标记的镜像
label (label=<key>
or label=<key>=<value>
)标签过滤
before (<image-name>[:<tag>]
, <image id>
or <image@digest>
) – 筛选在给定 id 或引用之前创建的镜像
since (<image-name>[:<tag>]
, <image id>
or <image@digest>
) – 筛选在给定 id 或引用之后创建的镜像
reference (镜像引用模式) – 筛选引用与指定模式匹配的镜像。
显示未标记镜像dangling
这里偷个懒,把官网图片粘贴过来了。因为实在找不到未标记的镜像。大家知道这种用法就好。
显示标签镜像label
要想显示标签镜像,首先需要给镜像添加标签。在编排容器时,也就是设计Dockerfile时,可以为镜像添加标签。
上面两张图,是为镜像添加标签的三种方法,用哪种都可以。设置好标签,就可以通过label过滤了。下图所示:
通过时间过滤镜像before/since
before是显示一个镜像之前的镜像,如图所示:
我有如上这么多的镜像。那么使用before来过滤一下。
要注意,因为很多镜像默认都是latest作为tag,mysql的tag是8.0,所以直接使用mysql相当于mysql:latest,因此会报错。必须将tag一并标注才可以正常过滤。since也是一样。下图所示:
显示其引用与指定模式匹配的镜像reference
再看一下所有的镜像。先以条件b*:*est过滤:
奇怪啊!最下面的boystar/ubantu似乎也符合条件,但没显示出来。于是,我改变条件bo*/u*:*est,显示了。
因此,带/的,需要把/加上才好。
选项示例4:–format
该选项使用 Go 模板以漂亮(自定义)的方式打印容器输出。
Go 模板的有效占位符列表如下:
占位符 | 描述 |
---|---|
.ID | 镜像Id |
.Repository | 镜像仓库名 |
.Tag | 镜像标签 |
.Digest | 镜像摘要 |
.CreatedSince | 自从镜像创建以来的流逝时间。 |
.CreatedAt | 镜像创建的时间 |
.Size | 镜像磁盘大小 |
我们看到docker的很多命令,都有–format这个选项,它们的作用都是一样的。以下是我在阿里云上的容器列表,以{{.ID}}\t{{.Repository}}\t{{.Tag}}作为格式。其中可以换成任何的占位符。
选项示例5:–no-trunc
不截断输出,就是显示全部信息,很简单。
选项示例6:-q, –quiet
这个更简单。只是显示镜像ID。
好了,今天的内容就到这里。下一期再见!