Website/docker_cleanup.sh

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