Závislosti a řešení problémů v Docker Compose

Intermediate Docker

Mike Metzger

Data Engineering Consultant

Co jsou závislosti?

  • Závislosti definují pořadí spouštění zdrojů
  • Zdroje (kontejnery) mohou vyžadovat jiné zdroje
  • Příklad webové aplikace
    • Databázový kontejner postgresql musí startovat jako první

Příklad závislostí kontejnerů – postgres

Intermediate Docker

Co jsou závislosti?

  • Závislosti definují pořadí zdrojů
  • Zdroje (kontejnery) mohou vyžadovat jiné zdroje
  • Příklad webové aplikace
    • Databázový kontejner postgresql musí startovat jako první
    • Pak python_app

Příklad závislostí kontejnerů – python_app

Intermediate Docker

Co jsou závislosti?

  • Závislosti definují pořadí zdrojů
  • Zdroje (kontejnery) mohou vyžadovat jiné zdroje
  • Příklad webové aplikace
    • Databázový kontejner postgresql musí startovat jako první
    • Pak python_app
    • Nakonec webový server nginx

Příklad závislostí kontejnerů – úplný

Intermediate Docker

depends_on

  • Závislosti se definují atributem depends_on
  • Závislosti lze řetězit, viz příklad
  • Nebo lze definovat více závislostí pro jeden zdroj
  • Pořadí v souboru compose.yaml nezáleží
services:
  postgresql:
    image: postgresql:latest

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

Vypnutí aplikací

  • Vypnutí aplikace probíhá v opačném pořadí
  • Zastaví se zdroj nginx

Příklad závislostí kontejnerů – úplný

Intermediate Docker

Vypnutí aplikací

  • Vypnutí aplikace probíhá v opačném pořadí
  • Zastaví se zdroj nginx
  • Pak se zastaví zdroj python_app

Příklad závislostí kontejnerů – python_app

Intermediate Docker

Vypnutí aplikací

  • Vypnutí aplikace probíhá v opačném pořadí
  • Zastaví se zdroj nginx
  • Pak se zastaví zdroj python_app
  • A nakonec zdroj postgresql

Příklad závislostí kontejnerů – postgres

Intermediate Docker

Další možnosti

  • Docker Compose nabízí další možnosti pro závislosti
  • condition: určuje, kdy je zdroj připraven.
    • service_started – zdroj byl normálně spuštěn
      • Výchozí chování
    • service_completed_successfully – zdroj dokončil běh, např. počáteční konfigurace
    • service_healthy – zdroj splňuje kritéria definovaná v healthcheck
services:
  nginx:
    image: nginx/latest
    depends_on:
      python_app:
        condition: service_started

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

Nástroje pro řešení problémů v Docker Compose

  • Docker Compose nabízí další nástroje pro řešení problémů
  • docker compose logs – zobrazí výstup všech zdrojů aplikace
    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>
Intermediate Docker

docker compose top

  • docker compose top zobrazí stav zdrojů v aplikaci
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
Intermediate Docker

Pojďme si procvičit!

Intermediate Docker

Preparing Video For Download...