👁 В Docker многие до сих пор обновляют сервис через docker stop && docker run, что даёт пусть и короткий, но даунтайм. В проде это недопустимо. Даже без Kubernetes можно сделать аккуратное обновление без падения сервиса, если правильно использовать healthcheck и стратегию переключения.
📝 Настройка healthcheck для контроля состояния контейнера
Healthcheck позволяет Docker понимать, готов ли контейнер принимать трафик, а не просто «запущен ли процесс». Контейнер будет считаться healthy только если реально отвечает HTTP.
FROM nginx:alpine HEALTHCHECK --interval=5s --timeout=2s --retries=3 \ CMD curl -f http://localhost/ || exit 1
📝 Запуск новой версии параллельно старой
Вместо остановки старого контейнера, поднимаем новый с другим именем или портом.
docker run -d --name app_v2 -p 8081:80 myapp:latest
📌После этого проверяем, что новый контейнер перешёл в состояние healthy и реально обрабатывает запросы.
📝 Переключение трафика без даунтайма
После проверки можно переключить трафик (например, через reverse proxy или балансировщик) на новый контейнер и только потом остановить старый. Таким образом, пользователи вообще не замечают обновления.
docker stop app_v1 docker rm app_v1
❗️ Даже без оркестрации можно делать обновления без даунтайма. Главное — не путать «контейнер запущен» и «сервис реально готов работать», и всегда проверять health перед переключением.
tags: #docker #разработка #оптимизация


