如何通过标记删除Docker镜像,最好使用通配符?

我有一些自动化的stream程,用一堆有意义的标签来标记Docker镜像。 标签遵循结构化模式。

有没有办法通过标签查找和删除图像? 所以假设我有图像:

REPOSITORY TAG junk/root stuff_687805 junk/root stuff_384962 

理想情况下,我希望能够做到:docker rmi -tag stuff_ *

任何好的方法来模拟?

与bash乐趣:

 docker rmi $(docker images | grep stuff_ | tr -s ' ' | cut -d ' ' -f 3) 

你也可以使用grep + args + xargs来实现它:

 docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs docker rmi 
  • docker图像列出了所有的图像
  • grepselect基于search“_stuff”的行
  • awk将用中间的冒号打印这些行的第一个和第二个参数(图像名称和标签名称)
  • xargs会使用awk返回的每一行作为参数运行“docker rmi”命令

注意:小心grepsearch,因为它也可以匹配除了标签之外的东西,所以最好先做一个干运行:

 docker images | grep "stuff_" | awk '{print $1 ":" $2}' | xargs -n1 echo 
  • xargs -n1 -n1标志表示xargs不会将awk返回的行分组在一起,而是一次将它们回显出来(为了更好的可读性)

只使用dockerfilter:

  docker rmi $(docker images --filter=reference="*:stuff_*" -q) 
  • reference="*:stuff_*"filter允许您使用通配符过滤图像;
  • -q选项仅用于显示图像ID。

Docker提供了一些可以用于标签的 过滤 ,但是我没有看到通配符的支持。

 docker images -f "label=mylabel=myvalue" 

此外,要为图像添加标签,您必须使用LABEL命令将信息添加到Dockerfile 。 我找不到添加标签到图像的方法,除非你更改了Dockerfile (即找不到命令行选项),尽pipe你可以在运行时用--label--label-file ( run文档 )。