Untitled
public
Jun 13, 2024
Never
29
1 #!/bin/bash 2 3 # Ustawienie daty przedziału na 2 tygodnie wstecz 4 DATE=$(date -d '2 weeks ago' +%Y-%m-%dT%H:%M:%S) 5 6 # Wylistowanie wszystkich obrazów używanych przez serwisy w klastrze 7 USED_IMAGES_IDS=$(docker service ls --format "{{.Image}}" | xargs -n 1 docker inspect --format '{{.Id}}' | sort | uniq) 8 9 # Wylistowanie obrazów, które nie są aktualnie używane i są starsze niż 2 tygodnie 10 IMAGES=$(docker images --filter "dangling=false" --format "{{.ID}} {{.Repository}}:{{.Tag}} {{.CreatedAt}}" | awk -v date="$DATE" '$3 < date {print $1 " " $2}') 11 12 # Przechodzenie przez listę obrazów i sprawdzanie, czy są używane przez serwisy w klastrze 13 while IFS= read -r line; do 14 IMAGE_ID=$(echo $line | awk '{print $1}') 15 IMAGE_TAG=$(echo $line | awk '{print $2}') 16 17 if ! echo "${USED_IMAGES_IDS}" | grep -q "${IMAGE_ID}"; then 18 echo "Usuwanie obrazu: $IMAGE_TAG ($IMAGE_ID)" 19 docker rmi $IMAGE_ID 20 else 21 echo "Obraz ${IMAGE_TAG} ($IMAGE_ID) jest używany przez serwisy w klastrze i nie będzie usunięty." 22 fi 23 done <<< "$IMAGES"