使用一段时间Docker后会产生很多临时镜像(悬虚镜像),数量还少勉强手动逐条删除,一段时间不清理数量多起来删除很费时,所以想批量删除。可以利用linux三剑客命令awk

  • awk
    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

使用方法 : awk ‘{pattern + action}’ {filenames}
编程时用法 : command1 | awk {print $1}

输出结果第一列数据

1
docker images | awk '{print $1}'

再配合grep查找关键字,可以用正则表达式,xargs结果作为参数给docker rmi,删除指定标签的镜像

1
docker images | awk '{print $1}' | grep mysql | xargs -t docker rmi
  • 删除临时镜像
1
docker ps -a | e grep -v 'mysql|post|kiban|elas|mongo' | awk '{print $1}' | xargs -t docker rm

有些时候会有些<none>的镜像,如下List-3,可能是临时产生的,删除这种镜像,直接用上面的是不行的
这种,注意awk中要用\t隔开,后面的awk才能得到我们想要的$2

1
docker images | awk '{print $1"\t"$2"\t"$3}' | grep "<none>" | awk '{print $3}' | xargs -t docker rmi

或者下面这种

1
docker images | grep "<none"| awk '{print $3}'|xargs -t docker rmi
  • 删除异常停止的容器
1
docker ps -a | grep -E 'Exited|Created' | awk '{print $1}' | xargs -t docker rm
  • 清理无用镜像
    它支持的子命令有:
    • -a, --all : 删除所有没有用的镜像,而不仅仅是临时文件
    • -f, --force : 强制删除镜像文件,无需弹出提示确认
1
docker image prune
  • 清理无用卷
1
docker volume prune
  • 清理所有无用volume、image、container、network
    注意:慎用,删除所有不在使用的资源
1
docker system prune