Docker auf meinem Raspberry Pi

Docker auf meinem Raspberry Pi

Installation

Ich habe Docker und docker-compose entgegen der Empfehlung auf docker.com über die Paketlisten von Debian installiert. Damit bekomme ich neue Updates zwar nicht so schnell, aber die benötige ich für meinen nicht aus dem Internet erreichbaren Raspberry Pi auch nicht.

Update von laufenden docker-compose Projekten

Ich habe mir ein kleines Skript geschrieben, welches die laufenden Docker-Container durchgeht und ihre 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 aller nicht verwendeten 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