Поиск по сайту:

Как (и зачем) добавлять проверки работоспособности в ваши контейнеры Docker


Вы создали образ Docker, поместили его в свой реестр и запустили новый контейнер в производственной среде. Все работает, когда вы направляетесь домой на весь день, но, когда вы возвращаетесь на следующее утро, вы получаете сообщения о сбоях в работе. Ваш контейнер все еще работает, но не обслуживает запросы.

Этот сценарий может быть неприятно знаком операционным группам, работающим с Docker. Вот как использовать функцию проверки работоспособности Docker для получения точных данных о доступности ваших сервисов.

Как работают проверки работоспособности

Проверки работоспособности позволяют контейнеру показывать доступность своей рабочей нагрузки. Это не зависит от того, запущен ли контейнер. Если ваша база данных выйдет из строя, ваш сервер API не сможет обрабатывать запросы, даже если его контейнер Docker все еще работает.

Это делает бесполезным опыт во время устранения неполадок. Простой docker ps сообщит о доступности контейнера. Добавление проверки работоспособности расширяет вывод docker ps, чтобы включить истинное состояние контейнера.

Вы настраиваете проверки работоспособности контейнера в своем Dockerfile. Это принимает команду, которую демон Docker будет выполнять каждые 30 секунд. Docker использует код выхода команды, чтобы определить работоспособность вашего контейнера:

  • 0 — контейнер исправен и работает нормально.
  • 1 — контейнер неисправен; рабочая нагрузка может не работать.
  • 2 — этот код состояния зарезервирован Docker и не должен использоваться.

Когда HEALTHCHECK присутствует в Dockerfile, вы увидите работоспособность контейнера в столбце STATUS при запуске docker ps.

Работоспособность не проверяется сразу при создании контейнеров. Статус будет отображаться как starting перед запуском первой проверки. Это дает контейнеру время для выполнения любых задач запуска. Контейнер, прошедший проверку работоспособности, будет отображаться как работоспособный; неработоспособный контейнер отображает неработоспособный.

Написание команд проверки работоспособности

Проверки работоспособности контейнера настраиваются с помощью инструкции HEALTHCHECK в вашем Dockerfile. Вы должны использовать команду проверки работоспособности, подходящую для вашего контейнера. Для веб-серверов curl позволяет легко выполнить базовую проверку готовности. Отправьте эхо-запрос на известную конечную точку, которая должна быть доступна, когда ваша служба работает.

FROM nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || exit 1

В этом примере контейнер будет помечен как неработоспособный, если конечная точка вашего сервера /api/healthcheck выдаст статус ошибки.

Вы можете использовать docker inspect, чтобы увидеть вывод команд проверки работоспособности. Это полезно при отладке инструкции HEALTHCHECK.

docker inspect --format='{{json .State.Health}}' my-container

Замените my-container идентификатором или именем контейнера, который вы хотите проверить. Эти сведения отображаются в выводе docker ps.

Настройка проверок работоспособности

Docker позволяет настроить частоту проверок работоспособности. Вы также можете изменить критерии, которые помечают контейнер как неработоспособный.

Доступны четыре варианта:

  • --interval — установите время между проверками работоспособности. Это позволяет переопределить значение по умолчанию, равное 30 секундам. Используйте более высокий интервал, чтобы увеличить время между проверками. Это помогает, если у вас есть служба с низким приоритетом, регулярные проверки работоспособности которой могут повлиять на производительность. Используйте более регулярную частоту для критически важных служб.
  • --start-period — установите продолжительность после запуска контейнера, когда проверки работоспособности следует игнорировать. Команда по-прежнему будет выполняться, но неработоспособный статус не будет учитываться. Это дает контейнерам время для завершения процедур запуска.
  • --retries. Это позволяет потребовать несколько последовательных сбоев, прежде чем контейнер будет помечен как неработоспособный. По умолчанию оно равно 3. Если проверка работоспособности завершается неудачей, но последующая проходит успешно, контейнер не переходит в состояние неработоспособный. Он станет неработоспособным после трех последовательных неудачных проверок.
  • --timeout — установите время ожидания для команд проверки работоспособности. Docker сочтет проверку неудачной, если команда не завершится в течение этого времени.

Опции передаются как флаги инструкции HEALTHCHECK. Поставьте их перед командой проверки работоспособности:

HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://localhost || exit 1

Эта конфигурация указывает Docker запускать curl каждые 60 секунд. Контейнер будет помечен как неработоспособный, если пять последовательных тестов имеют ненулевой код выхода.

Формат команды

Синтаксис команды HEALTHCHECK поддерживает либо простой CMD, либо массив exec в стиле точки входа. Вы также можете передать NONE вместо CMD, чтобы отключить проверки работоспособности:

HEALTHCHECK NONE

Это позволяет запретить проверки работоспособности базового образа. Каждый оператор HEALTHCHECK переопределяет любые предыдущие инструкции в слоях вашего изображения.

Как насчет Docker Compose?

Docker Compose также поддерживает определения проверки работоспособности. Добавьте в свой сервис раздел healthcheck:.

version: "3"
services:
  app:
    image: nginx:latest
    ports:
      - 80:80
    healthcheck:
      test: curl --fail http://localhost || exit 1
      interval: 10s
      retries: 5
      start_period: 5s
      timeout: 10s

Ключ test определяет команду для запуска. Другие ключи соответствуют параметрам, принятым инструкцией Dockerfile HEALTHCHECK.

Краткое содержание

Установка инструкции HEALTHCHECK упрощает диагностику неисправного контейнера. Вы можете отслеживать готовность своей рабочей нагрузки независимо от состояния «работы» контейнера.

Проверки работоспособности совместимы с любой командой, которая выдает код выхода 0 или 1. Вы можете использовать общие команды, такие как curl и ping, для проверки веб-служб и баз данных. Для более расширенного управления напишите специальный скрипт и включите его в свои изображения.




Все права защищены. © Linux-Console.net • 2019-2024