【Docker学习】docker images

这是使用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。

好了,今天的内容就到这里。下一期再见!

  • 24
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值