Skip to content

Instantly share code, notes, and snippets.

@nanawel
Created December 12, 2019 08:27
Show Gist options
  • Save nanawel/2510138b92e0ebd7ae62d5742045154e to your computer and use it in GitHub Desktop.
Save nanawel/2510138b92e0ebd7ae62d5742045154e to your computer and use it in GitHub Desktop.
Delete all untagged images and - optionally - images from specified {repository} if older than {max-age}
#!/bin/bash
#
# Usage:
# $ cleanup_docker.sh [repository max-age]
echo "Deleting untagged images...."
UNTAGGED_IMAGES=$(docker images | grep "^<none>" | awk '{print $3}')
if [ ! -z "$UNTAGGED_IMAGES" ]; then
docker rmi $UNTAGGED_IMAGES
else
echo "No untagged images found."
fi
if [ ! -z "$1" ]; then
IMAGE_NAME="$1"
if [ ! -z "$2" ]; then
TS_LIMIT=$(date '+%s' --date="$2")
if [[ $? -gt 0 ]]; then
exit 1
fi
echo "Deleting images matching '$IMAGE_NAME' older than $(date -Iminutes -d "@$TS_LIMIT")"
MATCHING_IMAGES="$(docker images --format '{{.Repository}},{{.ID}}' | grep "^$IMAGE_NAME")"
IFS=$'\n'
for row in $MATCHING_IMAGES; do
IMAGE_ID="$(echo "$row" | awk -F',' '{print $2}')"
IMAGE_DATE_UTC="$(docker inspect -f "{{.Created}}" $IMAGE_ID)"
IMAGE_TS=$(date '+%s' --date="$IMAGE_DATE_UTC")
if [[ "$IMAGE_TS" -lt "$TS_LIMIT" ]]; then
echo "* Deleting $IMAGE_ID ($IMAGE_DATE_UTC)"
docker rmi -f $IMAGE_ID
fi
done
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment