#!/usr/bin/env bash # ============================================================================== # Bash 13: Docker & Container Lifecycle Scripting # ============================================================================== # In diesem Modul lernst du, wie Container-Umgebungen über Bash-Pipelines # überwacht, gepollt, gesichert (Volume-Backups) und bereinigt werden. # ============================================================================== # ------------------------------------------------------------------------------ # TODO 1: Container Health-Polling mit Retry-Schleife & Timeout # ------------------------------------------------------------------------------ # Implementiere die Funktion `poll_container_health`. # Parameter: # $1: Container-Name / ID (z.B. "production-db") # $2: Maximale Anzahl Versuche (Default: 5) # $3: Wartezeit zwischen Versuchen in Sekunden (Default: 1) # Verhalten: # - Führt in einer Schleife `docker inspect --format='{{.State.Health.Status}}' "$1"` aus # (oder nutzt den übergebenen / gemockten docker-Befehl). # - Wenn der Status "healthy" ist: Gib "CONTAINER_HEALTHY: $1" aus und return 0. # - Nach Erreichen von max_retries ohne "healthy": Gib "CONTAINER_TIMEOUT: $1" aus und return 1. # ------------------------------------------------------------------------------ poll_container_health() { local container_name="${1:-}" local max_retries="${2:-5}" local sleep_sec="${3:-1}" # TODO: Validiere Container-Name # TODO: Polling-Schleife implementieren echo "TODO: Implementiere poll_container_health" return 1 } # ------------------------------------------------------------------------------ # TODO 2: Docker Volume Backup-Kommando generieren # ------------------------------------------------------------------------------ # Implementiere die Funktion `build_volume_backup_command`. # Parameter: # $1: Volume-Name (z.B. "postgres_data") # $2: Zielverzeichnis auf Host (z.B. "/backups") # $3: Dateiname des Archivs (z.B. "db_backup.tar.gz") # Verhalten: # - Erzeugt den offiziellen Docker-Pattern-Befehl zur Datensicherung: # docker run --rm -v :/volume_data -v :/backup alpine tar czf /backup/ -C /volume_data . # - Bei fehlenden Parametern: Return 1. # ------------------------------------------------------------------------------ build_volume_backup_command() { local volume="${1:-}" local host_dir="${2:-}" local archive="${3:-}" # TODO: Validiere Parameter # TODO: Gib formatierten docker run Befehl aus echo "TODO: Implementiere build_volume_backup_command" return 1 } # ------------------------------------------------------------------------------ # TODO 3: Docker System Prune Befehl mit Filtern generieren # ------------------------------------------------------------------------------ # Implementiere die Funktion `build_docker_prune_command`. # Parameter: # $1: All-Flag ("true" oder "false") -> entfernt auch ungenutzte Images, nicht nur dangling # $2: Until-Stunden (optional, z.B. "24" oder "168") # Verhalten: # - Basisbefehl: `docker system prune -f` # - Wenn All-Flag "true": `-a` anhängen # - Wenn Until-Stunden angegeben: `--filter "until=h"` anhängen # - Beispiel: `docker system prune -f -a --filter "until=24h"` # ------------------------------------------------------------------------------ build_docker_prune_command() { local all_flag="${1:-false}" local until_hours="${2:-}" # TODO: Baue prune Befehl zusammen und gib ihn aus echo "TODO: Implementiere build_docker_prune_command" return 1 } # ------------------------------------------------------------------------------ # TODO 4: Container Statistiken (JSON) parsen # ------------------------------------------------------------------------------ # Implementiere die Funktion `parse_container_stats_json`. # Parameter: # $1: JSON-String mit Metriken # Beispiel: '{"name":"api_srv","cpu":"4.2%","mem_usage":"210MiB / 2GiB"}' # Verhalten: # - Extrahiert `name`, `cpu` und `mem_usage` via `jq` (oder Bash-Mitteln). # - Gibt formatierten String aus: # "CONTAINER: | CPU: | MEM: " # - Bei ungültigem/leerem JSON: Return 1. # ------------------------------------------------------------------------------ parse_container_stats_json() { local json_str="${1:-}" # TODO: Validiere JSON # TODO: Extrahiere Felder und gib Format aus echo "TODO: Implementiere parse_container_stats_json" return 1 }