官方文档

https://docs.docker.com/engine/reference/commandline/system_prune/
https://docs.docker.com/engine/reference/commandline/image_prune/
https://docs.docker.com/engine/reference/commandline/container_prune/
https://docs.docker.com/engine/reference/commandline/volume_prune/
https://docs.docker.com/engine/reference/commandline/network_prune/

查看docker使用磁盘的情况:

[root@prd-k8snode-11 docker]# docker system df
TYPE  TOTAL  ACTIVE  SIZE  RECLAIMABLEImages
82  59  13.23GB  4.18GB  (31%)Containers
170  119  55.98GB  9.96GB  (17%)Local Volumes
23  2  646.8MB  594.6MB  (91%)Build Cache
0  0  0B  0B 

  • 镜像占用了 13.23GB,可回收 4.18GB
  • 容器占用了 55.98GB,可回收 9.96GB
  • 本地数据卷占用 646.8MB,可回收 594.6MB

执行清理命令:

docker system prune

  • 删除关闭的容器
  • 删除无用的数据卷
  • 删除无用的网络
  • 删除dangling : 镜像

docker system prune -a

此命令清理更彻底,可多清理没有被容器使用的镜像。

遇到的问题

启用了 istio 的 k8s 集群会出现的问题:

执行以上命令后,会删除 istio-init 容器,由于此容器作为初始化容器,执行完毕后会处于关闭状态,如果删除会导致 pod 中的 istio-init 异常,所以执行删除时加上过滤器,根据标签过滤

解决方法

docker system prune --filter "label!=io.kubernetes.container.name=istio-init"

也可手动删除 dangling 镜像:

docker rmi -f $(docker image ls |grep none| awk '{print $3}')