Docker 清理镜像

Docker 清理镜像

philo-尼可 524 2021-04-01

在维护客户系统时发现一台机器的磁盘快不够用了,接着去另外几台看一下。鬼使神差的我看了一下 docker 镜像占用的空间,发现 docker 镜像空间占用很大。迷糊的我要清理之前不用的docker镜像。

查看docker 镜像所占的空间

docker system df

image.png

再看一下哪些镜像需要删除,要删除镜像名称的规律

docker images

image.png

制定各镜像的删除规则

使用grep过滤得到镜像(匹配镜像名称为uccr9.0_cloud_***_aliyun,标签为除了20210之外的其他行)

docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210"

image.png

使用awk过滤得到镜像ID(获取第三列的ID)

docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210"| awk  '{print $3}'

image.png

使用docker rmi 删除镜像

docker rmi $(docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210"| awk  '{print $3}')

呵呵 o(╥﹏╥)o 删不掉。
image.png

单个删除也删不掉,我要哭了。。。
image.png

解决一下

另想办法,首先不是权限的问题,multiple 是什么鬼,查一下镜像

docker images | grep b0fc81dfa94c

image.png
居然有两个id一模一样的,id不能识别唯一....

先尝试删除一个

要用 docker rmi name:tag 删除? 试一下

docker rmi ***.aliyuncs.com/***/cloud:uccr9.0_cloud_***_aliyun_20190919192549

提示是untagged
image.png
查一下空间,并没有变化
image.png
,再删除另外一个

docker rmi 172.16.41.113:52800/zcm9/cloud:uccr9.0_cloud_***_aliyun_20190919192549

删除掉了,开心。不用看,这次是真的删除了。
image.png

再次修改脚本

awk 需要输出两列,并且中间要加上 “:” ,先输出两列看看效果

docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210" | awk  '{print $1 $2}'

image.png

中间加 “:” awk 真强大

docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210" | awk  '{print $1":"$2}'

image.png

冒号也有了,可以着手删除了

docker rmi $(docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210" | awk  '{print $1":"$2}')

终于全部删除了,爽啊
image.png

最后再查看一下镜像空间

只清理一个应用的镜像,就回来了50G,哈哈
image.png

复盘

  • 为什么删除不掉?
    看这里 docker rmi文档

  • 为什么有两个id一模一样的镜像?
    因为 ic-k8s-master002 这台机器是镜像接收、发布机。
    镜像先从阿里云镜像仓库 pull 到这台机器上,在这台机器上 tag 之后,再上传到环境的镜像仓库,所有会有两个。

  • 另外,看了docker rmi文档,也提想到了一个另外的解决办法,那就是加上 -f(之前不用是因为这是生产环境,怕搞坏了 Ծ‸Ծ )

docker rmi -f $(docker images | grep uccr9.0_cloud_***_aliyun |grep -v "20210"| awk  '{print $3}')
  • 最后我发现镜像多少和这台机器的空间占用情况没有关系 o(╥﹏╥)o
    image.png

  • 但是还是把过程记录下来了。


# docker # 部署 # awk