45 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # This script cleans up Docker resources that are not being used. Including images, containers, volumes. 
 | |
| 
 | |
| ### !!! WARNING !!! ###
 | |
| # This command is destructive and should be used with caution, as it permanently deletes all unused containers, images, networks, and volumes without recovery options. 
 | |
| # This will also delete persistent data volumes!
 | |
| # Always make sure, that you have a backup of your data before running this script.
 | |
| 
 | |
| # Script: cleanup_docker.sh
 | |
| # Log file location
 | |
| LOG_FILE="$(dirname "$0")/docker_cleanup.log"
 | |
| 
 | |
| # Run cleanup command and capture output
 | |
| OUTPUT=$(docker system prune -af --volumes 2>&1)
 | |
| 
 | |
| # Extract reclaimed space amounts (excluding "Total reclaimed space: 0B" lines)
 | |
| RECLAIMED_SPACES=$(echo "$OUTPUT" | grep -Po '(?<=Total reclaimed space: )[0-9.]+[A-Z]+' | grep -v '^0B$')
 | |
| 
 | |
| # Calculate total reclaimed space
 | |
| TOTAL_RECLAIMED=0
 | |
| for SPACE in $RECLAIMED_SPACES; do
 | |
|   UNIT=${SPACE: -2} # Extract the unit (e.g., MB, GB)
 | |
|   VALUE=${SPACE%${UNIT}} # Extract the numeric value
 | |
|   VALUE=${VALUE//,/} # Remove any commas if present
 | |
| 
 | |
|   case $UNIT in
 | |
|     KB) VALUE=$(echo "$VALUE / 1024 / 1024" | bc -l);; # Convert KB to GB
 | |
|     MB) VALUE=$(echo "$VALUE / 1024" | bc -l);;       # Convert MB to GB
 | |
|     GB) VALUE=$VALUE;;                                # Already in GB
 | |
|     *) VALUE=0;;                                      # Unknown unit
 | |
|   esac
 | |
| 
 | |
|   TOTAL_RECLAIMED=$(echo "$TOTAL_RECLAIMED + $VALUE" | bc -l)
 | |
| done
 | |
| 
 | |
| # Get the current timestamp
 | |
| TIMESTAMP=$(date '+%d.%m.%Y %H:%M:%S')
 | |
| 
 | |
| # Write the log entry only if there's something reclaimed
 | |
| if (( $(echo "$TOTAL_RECLAIMED > 0" | bc -l) )); then
 | |
|   printf "%s - Cleanup finished. Total reclaimed space: %.3f GB\n" "$TIMESTAMP" "$TOTAL_RECLAIMED" >> "$LOG_FILE"
 | |
| else
 | |
|   printf "%s - Cleanup finished. No space was reclaimed.\n" "$TIMESTAMP" >> "$LOG_FILE"
 | |
| fi | 
