"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте". (с) Мартин Голдинг
Health Check для докер-контейнера
Получить ссылку
Facebook
Twitter
Pinterest
Электронная почта
Другие приложения
С версии докера 1.12 в докер-контейнере появилась возможность проверки работоспособности контейнера – так называемый health check.
Типичный health check организуется периодическим вызовом некой команды, которая проверяет «жив» ли сервис, который исполняется в контейнере. Так, для веб-сервера который отвечает за работу некоторого сайта это может быть команда curl которая проверяет переделённую страницу веб-сайта, это может быть оценка используемой памяти сервисом или загрузка процессора в течении некоторого времени.
Статус «здоровья» докер-контейнера до первой проверки принимает значение “starting”. После любой успешной проверки он становится “healthy”. Если тест «падает» несколько раз подряд в течении определенного интервала, то такой контейнер считается «плохим» (unhealthy). Статус докер-контейнера можно проверить командами “docker ps” и “docker container ls”.
Если тексту с картинками вы предпочитаете видео, то вот мой обзор healthcheck для docker container на YouTube.
Как включить health check для докер-контейнера
Health check для докер-контейнера может быть указан в нескольких местах
В командах “docker run” и “docker container run”
В файле Dockerfile
В файле Docker compose
В команде docker service create
Рассмотрим установку health check на примере Dockerfile. Для Dockerfile она имеет вот такой формат. Вот здесь можно посмотреть спецификацию команды helalthcheck для dockerfile
HEALTHCHECK [OPTIONS] CMD command
OPTIONS – параметры проверки «здоровья» докер-контейнера. Их можно не указывать, если вас устраивают дефолтные параметры.
command – непосредственно команда из оболочки (shell) которая проверяет состояние докер-контейнера.
От одного понимания, что контейнер «испортился» пользы не много. Гораздо удобнее, было бы если докер мог бы перезапустить «проблемный» контейнер. К сожалению, «из коробки» такое работает только в режиме Docker Swarm, когда вы управляете кластером из докер-контейнеров. Более подробно про Swarm можно почитать https://docs.docker.com/engine/swarm/key-concepts/
Чтобы добиться такого же и для одного докер-контейнера нужно сделать следующее.
Заменить exit 1 на kill 1 в инструкции HEALTHCHECK
Запускать докер-контейнер с опцией –restart always
Пример
Меняем Dockerfile следующим образом
FROM nginx
RUN echo "ping" >> /usr/share/nginx/html/ping.html
docker container run --restart always -d -p 80:80 testhl
Обратите внимание, мне пришлось убрать опцию “--rm” так как она конфликтует с “--restart”
Обратите внимание на значения в поле STATUS. Я его проверял в разные интервалы времени и видно, что контейнер некоторое время работал (статус был up 5 seconds, up 22 seconds) и затем был перезапущен (статус стал up 11 seconds).
В этой статье я хочу рассказать про пары команды docker save/load и docker export/import, показать примеры их использования и рассказать чем они отличаются. Да и как обычно, если тексту с картинками вы предпочитаете видео, то вот моя видео-инструкция на YouTube. Команды docker save и docker load Начнем с пары docker save/load. Эта пара команд работает с докер-имиджами. Команда docker save сохраняет имидж с локальной машины в tar-архив. Этот архив содержит всю необходимую информацию, чтобы потом восстановить докер-имидж. Восстановление докер-имиджа из tar-архива производится командой docker load. Теперь посмотрим на примере как это делается. У меня локально есть докер-имидж “alpine”. Чтобы сохранить его как tar-архив воспользуемся командой docker save alpine -o alpine-image.tar Обратите внимание, на ключ “-o“. Он позволяет указать имя файла, в который надо сохранить докер-имидж. Теперь я удалю этот имидж из системы командой docker image rm alpine Как вы видите, никаких имиджей у м
Я регулярно пользуюсь утилитами Sysinternals и хочу поделиться одним из cпособов как при помощи Process Explorer выяснить какой процесс заблокировал доступ к файлу или папке. Использовать утилиты очень удобно – они бесплатны, не требуют инсталляции и могут быть запущены без предварительного скачивания из интернета (см http://live.sysinternals.com/ ). Последние 2 пункта делают их очень удобными при анализе и устранении проблем на серверах. Я недавно завел Ютуб-канал, где выкладываю видео по теме блога. Приглашаю Вас посмотреть и подписаться что бы не пропустить новые выпуски. Итак, как же узнать, кто держит тот или иной файл или папку. Для скриншотов я смоделировал такую ситуацию нарочно, открыв в Word файл "D:\temp\Doc1.docx" и пытаясь его в это же время удалить в проводнике. При попытке удалить файл получаю следующее сообщение Поищем этот документ в Process Explorer: Find->Find Handle or DLL… В появившемся окне вводим имя заблокированного файла и жмем Search Двойной к
Как пишет в своем блоге Janson Zanders, признанный эксперт в области разработки программного обеспечения, соавтор книги Design Patterns, один из разработчиков JUnit и Eclipse -- Эрик Гамма присоединится к команде разработчиков Visual Studio и возглавит Visual Studio development lab в Цюрихе. Подробнее здесь .
Комментарии