Dependențe și depanare în Docker Compose

Docker intermediar

Mike Metzger

Data Engineering Consultant

Ce sunt dependențele?

  • Dependențele definesc ordinea de pornire a resurselor
  • Resursele (containerele) pot necesita alte resurse
  • Exemplu de aplicație web
    • Containerul de baze de date postgresql trebuie pornit primul

Exemplu de dependență între containere - postgres

Docker intermediar

Ce sunt dependențele?

  • Dependențele definesc ordinea resurselor
  • Resursele (containerele) pot necesita alte resurse
  • Exemplu de aplicație web
    • Containerul de baze de date postgresql trebuie pornit primul
    • Apoi python_app

Exemplu de dependență între containere - python_app

Docker intermediar

Ce sunt dependențele?

  • Dependențele definesc ordinea resurselor
  • Resursele (containerele) pot necesita alte resurse
  • Exemplu de aplicație web
    • Containerul de baze de date postgresql trebuie pornit primul
    • Apoi python_app
    • În final, serverul web nginx

Exemplu de dependență între containere - complet

Docker intermediar

depends_on

  • Dependențele se definesc cu atributul depends_on
  • Dependențele pot fi înlănțuite, ca în exemplu
  • Sau se pot defini mai multe dependențe per resursă, dacă este necesar
  • Ordinea în fișierul compose.yaml nu contează
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker intermediar

Oprirea aplicațiilor

  • Oprirea aplicației se face în ordine inversă
  • Se oprește resursa nginx

Exemplu de dependență între containere - complet

Docker intermediar

Oprirea aplicațiilor

  • Oprirea aplicației se face în ordine inversă
  • Se oprește resursa nginx
  • Apoi se oprește resursa python_app

Exemplu de dependență între containere - python_app

Docker intermediar

Oprirea aplicațiilor

  • Oprirea aplicației se face în ordine inversă
  • Se oprește resursa nginx
  • Apoi se oprește resursa python_app
  • Și în final resursa postgresql

Exemplu de dependență între containere - postgres

Docker intermediar

Alte opțiuni

  • Docker Compose oferă și alte opțiuni pentru dependențe
  • condition: definește criteriul de disponibilitate a unei resurse.
    • service_started - Resursa a pornit normal
      • Comportament implicit
    • service_completed_successfully - Resursa s-a executat cu succes, ex. configurare inițială
    • service_healthy - Resursa îndeplinește criteriile definite de healthcheck
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker intermediar

Instrumente de depanare Docker Compose

  • Docker Compose dispune de instrumente suplimentare de depanare
  • docker compose logs - Colectează ieșirea tuturor resurselor din aplicație
    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 intermediar

docker compose top

  • docker compose top afișează starea resurselor din aplicație
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 intermediar

Să exersăm!

Docker intermediar

Preparing Video For Download...