mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-18 17:01:07 +00:00
89 lines
2.2 KiB
Bash
Executable File
89 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
##
|
|
#
|
|
# script to remove all older linuxkit images
|
|
# see usage() for usage and functionality
|
|
#
|
|
|
|
usage() {
|
|
cat >&2 <<EOF
|
|
$0 [-n] <base> <versions>
|
|
|
|
Prune any images that start with <base> except the <versions> most recent versions.
|
|
[-n] = dry-run, but report what it would remove and leave.
|
|
|
|
Examples:
|
|
$0 linuxkit 2
|
|
will remove all versions of any image starting with linuxkit except for the 2 most recent of each
|
|
would match "linuxkit/foo" and ALSO "linuxkitprojects/foo"
|
|
|
|
$0 linuxkit/ 2
|
|
will remove all versions of any image starting with linuxkit/ except for the 2 most recent of each
|
|
would match "linuxkit/foo" but NOT "linuxkitprojects/foo"
|
|
|
|
$0 linuxkit/sshd 3
|
|
will remove all versions of linuxkit/sshd except for the 3 most recent
|
|
|
|
EOF
|
|
}
|
|
|
|
|
|
# backwards compatibility
|
|
dryrun=false
|
|
if [ "$1" = "-n" ]; then
|
|
dryrun=true
|
|
set -- "$2" "$3"
|
|
fi
|
|
|
|
# sufficient arguments
|
|
if [ $# -ne 2 ] ; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
imagebase="$1"
|
|
versions="$2"
|
|
unversions=$(( $versions + 1))
|
|
|
|
# make sure the imagebase is good
|
|
case "$imagebase" in
|
|
# has a slash in it
|
|
*/*)
|
|
testimage="$imagebase*"
|
|
;;
|
|
# no slash in it
|
|
*)
|
|
testimage="$imagebase*/*"
|
|
;;
|
|
esac
|
|
|
|
# find all of our images
|
|
IMAGELIST=$(docker image ls --filter=reference="$testimage"':*' --format '{{.Repository}} {{.Tag}} {{.CreatedAt}}')
|
|
|
|
# find unique names for all images
|
|
uniqueimages=$(echo "$IMAGELIST" | awk '{print $1}' | sort | uniq)
|
|
|
|
# now go through each image, find the list
|
|
for img in $uniqueimages; do
|
|
# get the unique list of each, and sort by date
|
|
sortedlist=$(echo "$IMAGELIST" | grep -w $img | sort -k 3,3 -r)
|
|
# now split
|
|
tokeep=$(echo "$sortedlist" | head -$versions | awk '{printf "%s:%s\t",$1,$2; $1=$2=""; print $0}')
|
|
todelete=$(echo "$sortedlist" | tail -n +$unversions | awk '{print $1":"$2}')
|
|
todeletedates=$(echo "$sortedlist" | tail -n +$unversions | awk '{printf "%s:%s\t",$1,$2; $1=$2=""; print $0}')
|
|
|
|
echo "$tokeep" | while read i; do
|
|
echo "KEEP\t$i"
|
|
done
|
|
if [ -n "$todeletedates" ]; then
|
|
echo "$todeletedates" | while read i; do
|
|
echo "DELETE\t$i"
|
|
done
|
|
if ! "$dryrun"; then
|
|
docker image rm $todelete
|
|
fi
|
|
fi
|
|
done
|