如何通过标记删除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文档 )。