zoukankan      html  css  js  c++  java
  • docker空间管理之清理磁盘占用

    1、docker部署后修改数据存放目录,默认存放到/var/lib/docker下面,修改到一个大的空间目录下面。参考我的另外一篇博客:https://www.cnblogs.com/cuishuai/p/9485939.html

    2、docker空间占用分析

    通常使用docker部署服务,使用一段时间后发现磁盘空间占用的很快,经排查发现占用最高的就是docker,发现一些比较老的image和废弃不用的container的volume没有清理造成的。由于只关注了docker的发布,却忽略了docker清理工作。长此以往容易导致服务器磁盘被塞满,从而部署的docker服务不可用,后果非常严重。所以就需要定期的清理一些没有用的过期资源。

    docker提供了一个cli命令可以方便的查看docker具体咋用磁盘情况:

    #docker system df 

    可以看到,docker system df 命令给出了images、containers、volumes、build cache占用磁盘的大小。最后一列RECLAIMABLE,表示可回收的空间大小。

    使用docker  system df -v,可以显示更详细的信息:

    知道空间占用情况了,结下来就是做清理工作。

    docker提供了docker system  prune来清理停掉的container、悬挂的image(没有tag)、没有使用的network、数据卷。

    当然有个-a参数,可以清理所有的东西,包括没有使用的镜像(谨慎使用)。:

    使用清理命令之前,一定要先确定container、image是否可以被删除。

    参考:https://docs.docker.com/engine/reference/commandline/system_prune/

    根据时间和label过滤。

    3、感觉这种方式有的时候不能满足需求,不是很灵活,所以写了一个脚本用来清理镜像:

    cat dockerImageClean.sh

    #!/bin/bash
    # docker clean
    tp=`df -h | grep /dev/vdb | awk '{print $5}' | tr -d %`
    
    t1=`docker images | grep -E "10.10.*sensors-log" |awk 'NR > 4 {printf "%s
    ",$3}'`
    t2=`docker images | grep -E "10.10.*satrun " |awk 'NR > 4 {printf "%s
    ",$3}'`
    
    
    deleteImage() {
    if [ $tp -ge 50 ];then
    for i in $1
    do
    docker rmi  -f $i
    #echo $i
    done
    fi
    }
    
    #delete sensors-log and sensors-logagent
    for i in $t1
    do
    deleteImage $i
    done
    
    #delete saturn
    for j in $t2
    do
    deleteImage $j
    done

    磁盘使用率超过50%后,保留最新的5个镜像,其他的都删掉。

  • 相关阅读:
    一些端口
    outlook 的微软手册
    目录摘要
    L2TP的包过滤规则
    outlook 的外出时助理程序对外部邮箱不起作用。1个解决办法和另外一个可能性
    用editplus 正则表达式修改联系人表
    Cisco NAT的理解。
    outlook 2003 无法记住密码
    ERD commander 2005的下载地址。
    outlook 2003启用日志记录排除故障。
  • 原文地址:https://www.cnblogs.com/cuishuai/p/9629576.html
Copyright © 2011-2022 走看看