Afhankelijkheden en troubleshooting in Docker Compose

Docker voor gevorderden

Mike Metzger

Data Engineering Consultant

Wat zijn afhankelijkheden?

  • Afhankelijkheden bepalen de opstartvolgorde van resources
  • Resources (containers) kunnen andere resources nodig hebben
  • Voorbeeld webapplicatie
    • Databasecontainer postgresql moet eerst starten

Voorbeeld van containerafhankelijkheid - postgres

Docker voor gevorderden

Wat zijn afhankelijkheden?

  • Afhankelijkheden bepalen de volgorde van resources
  • Resources (containers) kunnen andere resources nodig hebben
  • Voorbeeld webapplicatie
    • Databasecontainer postgresql moet eerst starten
    • Daarna python_app

Voorbeeld van containerafhankelijkheid - python_app

Docker voor gevorderden

Wat zijn afhankelijkheden?

  • Afhankelijkheden bepalen de volgorde van resources
  • Resources (containers) kunnen andere resources nodig hebben
  • Voorbeeld webapplicatie
    • Databasecontainer postgresql moet eerst starten
    • Daarna python_app
    • Tot slot de webserver nginx

Voorbeeld van containerafhankelijkheid - Volledig

Docker voor gevorderden

depends_on

  • Afhankelijkheden definieer je met het attribuut depends_on
  • Je kunt afhankelijkheden ketenen zoals in het voorbeeld
  • Of meerdere afhankelijkheden per resource instellen indien nodig
  • De volgorde in het compose.yaml-bestand maakt niet uit
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker voor gevorderden

Applicaties afsluiten

  • Een applicatie wordt in omgekeerde volgorde afgesloten
  • Stopt de resource nginx

Voorbeeld van containerafhankelijkheid - Volledig

Docker voor gevorderden

Applicaties afsluiten

  • Een applicatie wordt in omgekeerde volgorde afgesloten
  • Stopt de resource nginx
  • Stopt daarna de resource python_app

Voorbeeld van containerafhankelijkheid - python_app

Docker voor gevorderden

Applicaties afsluiten

  • Een applicatie wordt in omgekeerde volgorde afgesloten
  • Stopt de resource nginx
  • Stopt daarna de resource python_app
  • En tot slot de resource postgresql

Voorbeeld van containerafhankelijkheid - postgres

Docker voor gevorderden

Andere opties

  • Docker Compose biedt andere opties voor afhankelijkheden
  • condition: bepaalt wanneer een resource klaar is
    • service_started - Resource is normaal gestart
      • Standaardgedrag
    • service_completed_successfully - Resource is afgerond, bv. een initconfiguratie
    • service_healthy - Resource voldoet aan een door healthcheck gedefinieerd criterium
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

python_app: image: custom_app depends_on: postgresql: condition: service_healthy
Docker voor gevorderden

Docker Compose troubleshooting-tools

  • Docker Compose heeft extra troubleshooting-tools
  • docker compose logs - Verzamelt output van alle resources in de applicatie
    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 voor gevorderden

docker compose top

  • docker compose top toont de status van resources binnen een applicatie
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 voor gevorderden

Laten we oefenen!

Docker voor gevorderden

Preparing Video For Download...