Abhängigkeiten und Troubleshooting in Docker Compose

Docker für Fortgeschrittene

Mike Metzger

Data Engineering Consultant

Was sind Abhängigkeiten?

  • Abhängigkeiten legen die Startreihenfolge von Ressourcen fest
  • Ressourcen (Container) können andere Ressourcen benötigen
  • Beispiel-Webanwendung
    • Datenbank-Container postgresql muss zuerst starten

Beispiel für Container-Abhängigkeit – postgres

Docker für Fortgeschrittene

Was sind Abhängigkeiten?

  • Abhängigkeiten legen die Startreihenfolge von Ressourcen fest
  • Ressourcen (Container) können andere Ressourcen benötigen
  • Beispiel-Webanwendung
    • Datenbank-Container postgresql muss zuerst starten
    • Dann die python_app

Beispiel für Container-Abhängigkeit – python_app

Docker für Fortgeschrittene

Was sind Abhängigkeiten?

  • Abhängigkeiten legen die Startreihenfolge von Ressourcen fest
  • Ressourcen (Container) können andere Ressourcen benötigen
  • Beispiel-Webanwendung
    • Datenbank-Container postgresql muss zuerst starten
    • Dann die python_app
    • Und zuletzt der Webserver nginx

Beispiel für Container-Abhängigkeit – komplett

Docker für Fortgeschrittene

depends_on

  • Abhängigkeiten mit dem Attribut depends_on definieren
  • Abhängigkeiten lassen sich wie im Beispiel verketten
  • Oder mehrere Abhängigkeiten pro Ressource festlegen
  • Die Reihenfolge in der Datei compose.yaml ist egal
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker für Fortgeschrittene

Anwendungen herunterfahren

  • Das Herunterfahren erfolgt in umgekehrter Reihenfolge
  • Stoppt die Ressource nginx

Beispiel für Container-Abhängigkeit – komplett

Docker für Fortgeschrittene

Anwendungen herunterfahren

  • Das Herunterfahren erfolgt in umgekehrter Reihenfolge
  • Stoppt die Ressource nginx
  • Danach die Ressource python_app

Beispiel für Container-Abhängigkeit – python_app

Docker für Fortgeschrittene

Anwendungen herunterfahren

  • Das Herunterfahren erfolgt in umgekehrter Reihenfolge
  • Stoppt die Ressource nginx
  • Danach die Ressource python_app
  • Und schließlich die Ressource postgresql

Beispiel für Container-Abhängigkeit – postgres

Docker für Fortgeschrittene

Weitere Optionen

  • Docker Compose bietet weitere Optionen für Abhängigkeiten
  • condition: legt fest, wann eine Ressource bereit ist
    • service_started – Ressource ist normal gestartet
      • Standardverhalten
    • service_completed_successfully – Ressource lief bis zum Ende, z. B. für eine Erstkonfiguration
    • service_healthy – Ressource erfüllt ein von healthcheck definiertes Kriterium
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker für Fortgeschrittene

Docker-Compose-Tools fürs Troubleshooting

  • Docker Compose bietet zusätzliche Tools fürs Troubleshooting
  • docker compose logs – sammelt Ausgaben aller Ressourcen der Anwendung
    redis-1  | * oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis-1  | * Running mode=standalone, port=6379.
    redis-1  | * Server initialized
    redis-1  | * Ready to accept connections tcp
    web-1    | * Serving Flask app 'app.py'
    web-1    |  * Running on all addresses (0.0.0.0)
    web-1    |  * Running on http://172.20.0.2:5000
    web-1    | Press CTRL+C to quit
    
  • docker compose logs <resourcename>
Docker für Fortgeschrittene

docker compose top

  • docker compose top zeigt den Status der Ressourcen in einer Anwendung
composetest-redis-1
UID   PID    PPID   C    STIME   TTY   TIME       CMD
999   2767   2726   0    01:16   ?     00:03:27   redis-server *:6379

composetest-web-1
UID    PID    PPID   C    STIME   TTY   TIME       CMD
root   2768   2740   0    01:16   ?     00:00:23   /usr/local/bin/python /usr/local/bin/flask run
Docker für Fortgeschrittene

Lass uns üben!

Docker für Fortgeschrittene

Preparing Video For Download...