#!/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: 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