Skriptsammlung

Skriptsammlung

Hier sammle ich einige kleine, nützliche Skripte.

Automatisches Update von docker-compose Projekten

Ich habe ein kleines Skript geschrieben, welches die laufenden Docker-Container durchgeht und den Speicherort ihrer docker-compose.yml ermittelt. Damit können die Images leicht aktualisiert und bei Bedarf neu gestartet werden. Das Skript habe ich in /etc/cron.weekly/ abgelegt, damit es ein Mal wöchentlich ausgeführt wird. Wichtig ist, dass es keine Dateiendung hat und ausführbar ist, sonst funktioniert es nicht.

#!/bin/bash
# Dieses Skript geht alle *laufenden* Container durch, ermittelt den Speicherort
# ihrer docker-compose.yml und startet die Container bei Updates neu.
# Funktioniert nur bei Images, die nicht lokal gebaut werden.
# Achtung: Es werden alle in der docker-compose.yml vorhandenen Dienste gestartet.

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:

# Alle laufenden Container
container=$(docker ps --format="{{.ID}}")

# Erstelle ein Array mit allen docker-compose files ohne Duplikate
for a_container in $container; do
    config_dir=$(docker inspect $a_container | grep "com.docker.compose.project.working_dir" | cut -d '"' -f 4)
    echo ${config_files[*]} | grep "$config_dir" &>/dev/null
    if [ $? -eq 1 ]; then
        config_files+=("$config_dir/docker-compose.yml")
    fi
done

echo "$(date '+%F %T:') Starting update of ${#config_files[@]} docker-compose projects."

# Aktualisiere Images und starte Container bei Bedarf neu
for config in ${config_files[@]}; do
    if [ -f $config ]; then
        docker-compose -f $config pull -q --ignore-pull-failures
        docker-compose -f $config up -d
    fi
done

echo "$(date '+%F %T:') Done."

Monatliche Bereinigung von Docker Images

Lege eine neue Datei /etc/cron.monthly/prune_images mit dem Inhalt docker image prune -f an und mache sie ausführbar:

sudo sh -c 'echo "docker image prune -f" > /etc/cron.monthly/prune_images'
sudo chmod +x /etc/cron.monthly/prune_images

Der Befehl wird nun ein Mal im Monat ausgeführt und löscht alle nicht mehr von einem Container verwendeten Images.

Zuletzt aktualisiert am