Залежності та усунення несправностей у Docker Compose

Середній рівень Docker

Mike Metzger

Data Engineering Consultant

Що таке залежності?

  • Залежності визначають порядок запуску ресурсів
  • Ресурси (контейнери) можуть вимагати інші ресурси
  • Приклад вебзастосунку
    • Контейнер бази даних postgresql має стартувати першим

Приклад залежності контейнерів — postgres

Середній рівень Docker

Що таке залежності?

  • Залежності визначають порядок ресурсів
  • Ресурси (контейнери) можуть вимагати інші ресурси
  • Приклад вебзастосунку
    • Контейнер БД postgresql має стартувати першим
    • Потім python_app

Приклад залежності контейнерів — python_app

Середній рівень Docker

Що таке залежності?

  • Залежності визначають порядок ресурсів
  • Ресурси (контейнери) можуть вимагати інші ресурси
  • Приклад вебзастосунку
    • Контейнер БД postgresql має стартувати першим
    • Потім python_app
    • І нарешті вебсервер nginx

Приклад залежності контейнерів — повний

Середній рівень Docker

depends_on

  • Залежності задають через атрибут depends_on
  • Можна ланцюжити залежності, як у прикладі
  • Або мати кілька залежностей для ресурсу за потреби
  • Порядок у файлі compose.yaml не має значення
services:
  postgresql:
    image: postgresql:latest

python_app: image: custom_app depends_on: - postgresql
nginx: image: nginx/latest depends_on: - python_app
Середній рівень Docker

Завершення роботи застосунків

  • Завершення роботи застосунку відбувається у зворотному порядку
  • Зупиняє ресурс nginx

Приклад залежності контейнерів — повний

Середній рівень Docker

Завершення роботи застосунків

  • Завершення роботи застосунку відбувається у зворотному порядку
  • Зупиняє ресурс nginx
  • Потім зупиняє ресурс python_app

Приклад залежності контейнерів — python_app

Середній рівень Docker

Завершення роботи застосунків

  • Завершення роботи застосунку відбувається у зворотному порядку
  • Зупиняє ресурс nginx
  • Потім зупиняє ресурс python_app
  • І нарешті ресурс postgresql

Приклад залежності контейнерів — postgres

Середній рівень Docker

Інші варіанти

  • Docker Compose має інші варіанти для залежностей
  • condition: визначає, коли ресурс вважається готовим
    • service_started — ресурс нормально стартував
      • Типова поведінка
    • service_completed_successfully — ресурс відпрацював до кінця, напр., початкова конфігурація тощо
    • service_healthy — ресурс відповідає критерію з 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

Засоби діагностики Docker Compose

  • У Docker Compose є додаткові засоби діагностики
  • docker compose logs — збирає вивід усіх ресурсів у застосунку
    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

docker compose top

  • docker compose top показує стан ресурсів у межах застосунку
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

Давайте потренуємось!

Середній рівень Docker

Preparing Video For Download...