Zależności i rozwiązywanie problemów w Docker Compose

Docker średnio zaawansowany

Mike Metzger

Data Engineering Consultant

Czym są zależności?

  • Zależności określają kolejność uruchamiania zasobów
  • Zasoby (kontenery) mogą wymagać innych zasobów
  • Przykładowa aplikacja webowa
    • Kontener bazy danych postgresql musi uruchomić się pierwszy

Przykład zależności kontenerów – postgres

Docker średnio zaawansowany

Czym są zależności?

  • Zależności określają kolejność zasobów
  • Zasoby (kontenery) mogą wymagać innych zasobów
  • Przykładowa aplikacja webowa
    • Kontener bazy danych postgresql musi uruchomić się pierwszy
    • Następnie python_app

Przykład zależności kontenerów – python_app

Docker średnio zaawansowany

Czym są zależności?

  • Zależności określają kolejność zasobów
  • Zasoby (kontenery) mogą wymagać innych zasobów
  • Przykładowa aplikacja webowa
    • Kontener bazy danych postgresql musi uruchomić się pierwszy
    • Następnie python_app
    • Na końcu serwer WWW nginx

Przykład zależności kontenerów – pełny

Docker średnio zaawansowany

depends_on

  • Zależności definiuje się za pomocą atrybutu depends_on
  • Można łączyć zależności jak w przykładzie
  • Lub definiować wiele zależności dla jednego zasobu
  • Kolejność w pliku compose.yaml nie ma znaczenia
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Docker średnio zaawansowany

Zamykanie aplikacji

  • Zamykanie aplikacji odbywa się w odwrotnej kolejności
  • Zatrzymuje zasób nginx

Przykład zależności kontenerów – pełny

Docker średnio zaawansowany

Zamykanie aplikacji

  • Zamykanie aplikacji odbywa się w odwrotnej kolejności
  • Zatrzymuje zasób nginx
  • Następnie zatrzymuje zasób python_app

Przykład zależności kontenerów – python_app

Docker średnio zaawansowany

Zamykanie aplikacji

  • Zamykanie aplikacji odbywa się w odwrotnej kolejności
  • Zatrzymuje zasób nginx
  • Następnie zatrzymuje zasób python_app
  • Na końcu zasób postgresql

Przykład zależności kontenerów – postgres

Docker średnio zaawansowany

Inne opcje

  • Docker Compose oferuje inne opcje dla zależności
  • condition: określa, kiedy zasób jest gotowy.
    • service_started – zasób uruchomił się normalnie
      • Domyślne zachowanie
    • service_completed_successfully – zasób zakończył działanie pomyślnie, np. konfiguracja wstępna
    • service_healthy – zasób spełnia kryteria zdefiniowane przez 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 średnio zaawansowany

Narzędzia diagnostyczne Docker Compose

  • Docker Compose oferuje dodatkowe narzędzia diagnostyczne
  • docker compose logs – zbiera dane wyjściowe ze wszystkich zasobów aplikacji
    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 średnio zaawansowany

docker compose top

  • docker compose top pokazuje stan zasobów w aplikacji
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 średnio zaawansowany

Czas na ćwiczenia!

Docker średnio zaawansowany

Preparing Video For Download...