Зависимости и устранение неполадок в Docker Compose

Средний уровень Docker

Mike Metzger

Data Engineering Consultant

Что такое зависимости?

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

Container Dependency Example - postgres

Средний уровень Docker

Что такое зависимости?

  • Зависимости определяют порядок запуска ресурсов
  • Ресурсы (контейнеры) могут требовать другие ресурсы
  • Пример веб-приложения
    • Сначала должен запуститься контейнер базы данных postgresql
    • Затем — python_app

Container Dependency Example - python_app

Средний уровень Docker

Что такое зависимости?

  • Зависимости определяют порядок запуска ресурсов
  • Ресурсы (контейнеры) могут требовать другие ресурсы
  • Пример веб-приложения
    • Сначала должен запуститься контейнер базы данных postgresql
    • Затем — python_app
    • И наконец — веб-сервер nginx

Container Dependency Example - Full

Средний уровень 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

Container Dependency Example - Full

Средний уровень Docker

Остановка приложений

  • Остановка приложения происходит в обратном порядке
  • Сначала останавливается ресурс nginx
  • Затем — ресурс python_app

Container Dependency Example - python_app

Средний уровень Docker

Остановка приложений

  • Остановка приложения происходит в обратном порядке
  • Сначала останавливается ресурс nginx
  • Затем — ресурс python_app
  • И наконец — ресурс postgresql

Container Dependency Example - 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...