Docker 缓存空间清理,通过prune

一、硬盘占用查看

  1. 硬盘空间查看

df -TH

  1. inode 查看

df -i

  1. Docker占用的磁盘空间查看

docker system df

  1. 命令查看磁盘使用情况。

du -hs /var/lib/docker/

二. Docker 清理

自动清理
#类似于Linux上的df命令,用于查看Docker的磁盘使用情况:
docker system df

#可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。 
docker system prune

#清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了…
#所以使用之前一定要想清楚.。我没用过,因为会清理 没有开启的  Docker 镜像。
docker system prune -a

#docker system df -v 命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间
docker system df -v

自动清理命令

docker system prune 可对空间进行自动清理。

该命令所清理的对象如下:
已停止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
所有悬空的镜像

对于上面提到的一些镜像或容器的状态,需要我们心里有点数:
已使用的镜像:指所有已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的所有容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像
悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定-t参数配置Tag导致的。

docker system prune后可以加额外的参数,如:
docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息。
另外除了system级别的,还有针对容器或是镜像级别的删除命令:
docker image prune:删除悬空的镜像。

docker container prune:删除无用的容器。
      --默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
      --如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
      --$ docker container prune --filter "until=24h"  

docker volume prune:删除无用的卷。
docker network prune:删除无用的网络

手动清除

对于悬空镜像和未使用镜像可以使用手动进行个别删除

  1. 删除所有已经停止的容器

注意:要先确认停止的容器中是否有不可以删除的,也可以删除后使用镜像再启一个容器。

docker rm $(docker ps -a|grep Exited |awk '{print $1}')docker rm $(docker ps -qf status=exited)

2、删除所有悬空镜像,不删除未使用镜像:

docker rmi $(docker images -f “dangling=true” -q)

  1. 删除所有未打标签的镜像
docker rmi $(docker images -q -f dangling=true)

2、删除所有未使用镜像和悬空镜像

docker rmi $(docker images -q)

清理卷

如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):

  1. 删除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)
  1. 清理磁盘、删除关闭的容器、无用的数据卷和网络

    参数:-a : 清除所有没有容器引用的镜像时,使用 docker system prune -a (慎用)-f or –force
    强制清除,不会出现提示,使用docker system prune -f(慎用)–filter :
    用来限制要保留的镜像的范围,例如:只清除超过创建时间超过24小时的镜像(docker image prune -a –filter “until=24h”)

容器清理

如果发现是容器占用过高的空间,可以手动删除一些:

  1. 删除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
  1. 删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

三、docker命令扩展

  1. 停止所有运行中的容器
docker stop $(docker ps -q)
  1. 停止所有容器

    docker stop $(docker ps -a -q)
  1. 重启所有容器
docker restart $(docker ps -a -q)
  1. 获取停止的容器id
cut:
docker ps -a | grep Exited | cut -d' ' -f1

awk:
docker ps -a | grep Exited | awk '{print $1}'
  1. 启动所有停止的容器
docker ps -a | grep Exited | awk '{print $1}' |xargs docker start
  1. 删除所有容器

    docker rm $(docker ps -aq)
  2. 删除所有镜像

docker rmi $(docker images -q)

四、清理docker缓存脚本

#!/bin/sh

echo "======== start clean docker containers logs ========"

logs=$(find /var/lib/docker/containers/ -name *-json.log)

for log in $logs
    do
    echo "clean logs : $log"
    cat /dev/null > $log
    done

echo "======== end clean docker containers logs ========"
作者:Jeebiz  创建时间:2023-02-12 01:51
最后编辑:Jeebiz  更新时间:2024-08-02 14:21