天天看點

Docker鏡像批量清理之道批量删除已經退出的容器批量删除帶有none字段的鏡像删除鏡像定時任務腳本注意事項

使用jenkins作為打包的工具,主機上的磁盤空間總是被慢慢被占滿,直到jenkins無法運作。本文從幾個方面來清理docker垃圾。

批量删除已經退出的容器

docker ps -a | grep "Exited" | awk '{print $1 }' | xargs docker rm
           

批量删除帶有none字段的鏡像

$3一般就是取出每一行的鏡像id字段

# 方案1: 根據鏡像id删除鏡像
docker images| grep none |awk '{print $3 }'|xargs docker rmi

# 方案2: 根據鏡像名删除鏡像
docker images | grep wecloud | awk '{print $1":"$2}' | xargs docker rmi
           

方案1,根據鏡像ID删除鏡像時,有寫鏡像雖然鏡像名不同,但是鏡像ID都是相同的,這是後往往會删除失敗。是以根據鏡像名删除鏡像的效果會更好。

删除鏡像定時任務腳本

#!/bin/bash
# create by wangduanduan
# when current free disk less then max free disk, you can remove docker images
#

GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

max_free_disk=5 # 5G. when current free disk less then max free disk, remove docker images
current_free_disk=`df -lh | grep centos-root | awk '{print strtonum($4)}'`

df -lh

echo "max_free_disk: $max_free_disk G"
echo -e "current_free_disk: ${GREEN} $current_free_disk G ${NC}"

if [ $current_free_disk -lt $max_free_disk ]
then
    echo -e "${RED} need to clean up docker images ${NC}"
    docker images | grep none | awk '{print $3 }' | xargs docker rmi
    docker images | grep wecloud | awk '{print $1":"$2}' | xargs docker rmi
else
    echo -e "${GREEN}no need clean${NC}"
fi
           

注意事項

為了加快打包的速度,一般不要太頻繁的删除鏡像

。因為老的鏡像中的某些不改變的層,可以作為新的鏡像的緩存,進而大大加快建構的速度。