117 lines
3.5 KiB
Bash
117 lines
3.5 KiB
Bash
#!/bin/bash
|
|
|
|
############################################################################
|
|
#### docker_cleanup.sh ####
|
|
#### Version 2.09.27.22 ####
|
|
#### ####
|
|
#### This Script is for Cleaning Docker on GitLab Runner ####
|
|
#### ####
|
|
#### This script just views and prunes unused and dangling docker ####
|
|
#### images, networks and unlinks pulls to clear disk space ####
|
|
#### ####
|
|
#### This script can be manually ran if needed, but is configured in ####
|
|
#### in cron to run once a week ####
|
|
#### ####
|
|
#### 0 4 * * 0 /usr/local/bin/docker_cleanup.sh ####
|
|
#### ####
|
|
#### Questions or Comments Contact: <Phil Connor> contact@mylinux.work ####
|
|
############################################################################
|
|
|
|
|
|
########################
|
|
### System Variables ###
|
|
########################
|
|
max_weeks=4
|
|
tstamp=$(date +%Y%m%d_%H%M%S)
|
|
log_path=/var/log
|
|
filename=gitlab-runner-clean_$tstamp.log
|
|
log=$log_path/$filename
|
|
|
|
############################
|
|
### Check Space PreClean ###
|
|
############################
|
|
docker_space_pre() {
|
|
cspace=$(docker system df)
|
|
{
|
|
echo "PrePruned Docker Space:"
|
|
echo ''
|
|
echo "$cspace"
|
|
|
|
} >>"$log"
|
|
docker_find
|
|
}
|
|
|
|
##########################################
|
|
### Find and List Docker Images in Log ###
|
|
##########################################
|
|
docker_find() {
|
|
{
|
|
echo '#####################################################################'
|
|
echo ' Finding Images'
|
|
echo '#####################################################################'
|
|
|
|
} >> "$log"
|
|
|
|
lsimages=$(docker image ls)
|
|
|
|
{
|
|
echo ''
|
|
echo 'listing all Docker Images:'
|
|
echo ''
|
|
echo "$lsimages"
|
|
|
|
} >> "$log"
|
|
docker_cleanup
|
|
}
|
|
|
|
######################################
|
|
### Check, Clean and Remove Images ###
|
|
######################################
|
|
docker_cleanup() {
|
|
{
|
|
echo '#####################################################################'
|
|
echo ' Cleaning Images'
|
|
echo '#####################################################################'
|
|
echo ''
|
|
|
|
}
|
|
|
|
docker image ls | awk 'NR>1 {print $0}' | while read -r list
|
|
do
|
|
id_img=$(echo "$list" | awk '{print $3}')
|
|
|
|
is_month=$(echo "$list" | grep 'month')
|
|
if [ -n "$is_month" ]; then
|
|
echo "$id_img"
|
|
docker rmi -f "$id_img"
|
|
continue
|
|
fi
|
|
|
|
num_week=$(echo "$list" | grep "week" | awk '{print $4}')
|
|
if [ -n "$num_week" ] && [ "$num_week" -ge $max_weeks ]; then
|
|
echo "$id_img"
|
|
docker rmi -f "$id_img"
|
|
fi
|
|
done
|
|
|
|
docker_space_post
|
|
} >> "$log"
|
|
|
|
##############################
|
|
### Check Space Post Clean ###
|
|
##############################
|
|
docker_space_post() {
|
|
cspace=$(docker system df)
|
|
{
|
|
echo "Current Docker Space, after Pruning:"
|
|
echo ''
|
|
echo "$cspace"
|
|
|
|
} >>"$log"
|
|
}
|
|
|
|
#####################
|
|
### Function Call ###
|
|
#####################
|
|
docker_space_pre
|