Skip to content

Instantly share code, notes, and snippets.

@Cellane
Created February 19, 2020 07:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cellane/f06b9e34bf9620f418e193792681fe94 to your computer and use it in GitHub Desktop.
Save Cellane/f06b9e34bf9620f418e193792681fe94 to your computer and use it in GitHub Desktop.
#!/bin/bash
IGNORED_IMAGES=("busybox" "debian:stretch-slim" "dokku/ambassador" "dokku/letsencrypt" "dokku/s3backup" "dokku/wait" "gliderlabs/herokuish:latest")
USED_IMAGES=("${IGNORED_IMAGES[@]}" $(docker container ls -a --format '{{.Image}}' | sort -u | uniq | awk -F ':' '$2{ print $1":"$2 }!$2{ print $1":latest" }'))
USED_IMAGE_IDS=()
ALL_IMAGE_IDS=($(docker image ls --format '{{.ID}}' | sort -u))
for image in "${USED_IMAGES[@]}"; do
IFS=":" read -a parameters <<<"$image"
imageName="${parameters[0]}"
imageVersion="${parameters[1]}"
if [ "$imageVersion" = "" ]; then
id=$(docker image ls | grep $imageName | awk '{ print $3 }')
else
id=$(docker image ls | grep $imageName | grep $imageVersion | awk '{ print $3 }')
fi
USED_IMAGE_IDS=("$id" "${USED_IMAGE_IDS[@]}")
done
for i in "${ALL_IMAGE_IDS[@]}"; do
unused=true
for j in "${USED_IMAGE_IDS[@]}"; do
if [ "$i" = "$j" ]; then
unused=false
fi
done
if [ "$unused" = true ]; then
name=($(docker image ls | grep $i | awk '{ print $1":"$2 }'))
echo "====> Removing ${name[@]}"
docker image rm ${name[@]} > /dev/null
fi
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment