Как перезапустить службу Docker

DockerBeginner
Практиковаться сейчас

Введение

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

Перезапуск демона Docker (Docker Daemon)

Демон Docker (Docker daemon) – это фоновый процесс, который управляет объектами Docker, такими как образы (images), контейнеры (containers), сети (networks) и тома (volumes). Перезапуск демона Docker часто необходим после внесения изменений в конфигурацию или для решения проблем, влияющих на всю среду Docker.

В этом шаге вы узнаете, как перезапустить демон Docker с помощью команд systemd.

Сначала давайте проверим текущий статус сервиса Docker.

sudo systemctl status docker

Вы должны увидеть вывод, указывающий, активен ли сервис Docker и работает ли он.

Output of checking Docker service status

Теперь давайте перезапустим сервис Docker. Это остановит все запущенные контейнеры, управляемые демоном, а затем снова запустит демон.

sudo systemctl restart docker

После завершения команды снова проверьте статус, чтобы убедиться, что сервис Docker успешно перезапущен.

sudo systemctl status docker

Вы должны увидеть, что сервис был перезапущен и активен.

В качестве альтернативы можно остановить и запустить сервис Docker отдельно. Сначала остановите сервис:

sudo systemctl stop docker

Проверьте статус, чтобы убедиться, что он неактивен:

sudo systemctl status docker

Затем запустите сервис:

sudo systemctl start docker

Наконец, проверьте статус еще раз, чтобы убедиться, что он активен:

sudo systemctl status docker

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

Перезапуск отдельных контейнеров (Individual Containers)

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

В этом шаге вы узнаете, как перезапускать отдельные контейнеры Docker.

Сначала давайте скачаем простой образ Nginx (Nginx image) и запустим контейнер.

docker pull nginx
docker run -d --name my-nginx -p 80:80 nginx

Эта команда скачивает образ nginx, запускает контейнер с именем my-nginx в отсоединенном режиме (-d) и сопоставляет порт 80 на хосте с портом 80 в контейнере (-p 80:80).

Убедитесь, что контейнер запущен:

docker ps

Вы должны увидеть контейнер my-nginx в списке со статусом Up.

Теперь давайте перезапустим контейнер my-nginx.

docker restart my-nginx

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

Снова проверьте статус контейнера:

docker ps

Контейнер по-прежнему должен быть указан как Up, но в столбце STATUS будет указано, что он был перезапущен (например, Up X seconds).

Вы также можете указать время ожидания для операции перезапуска, используя флаг -t. Например, чтобы подождать 5 секунд:

docker restart -t 5 my-nginx

Это полезно, если вам нужно дать вашему приложению больше или меньше времени для корректного завершения работы.

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

Настройка политик перезапуска контейнеров (Container Restart Policies)

Docker позволяет настраивать политики перезапуска (restart policies) для контейнеров. Политика перезапуска определяет, должен ли контейнер автоматически перезапускаться демоном Docker (Docker daemon) после его завершения. Это важная функция для обеспечения доступности ваших приложений.

В этом шаге вы узнаете, как настраивать политики перезапуска для контейнеров Docker.

Сначала давайте остановим и удалим предыдущий контейнер my-nginx, чтобы начать с чистого листа.

docker stop my-nginx
docker rm my-nginx

Теперь давайте запустим новый контейнер Nginx с политикой перезапуска always.

docker run -d --name my-nginx-always --restart=always -p 80:80 nginx

Флаг --restart=always указывает Docker всегда перезапускать контейнер, если он останавливается, независимо от кода выхода. Он также перезапустит контейнер при запуске демона Docker.

Убедитесь, что контейнер запущен:

docker ps

Теперь давайте смоделируем сбой контейнера, остановив его вручную.

docker stop my-nginx-always

Подождите несколько секунд и снова проверьте статус контейнера:

docker ps

Вы должны увидеть, что контейнер my-nginx-always был автоматически перезапущен демоном Docker. В столбце STATUS будет указано, что он находится в состоянии Up в течение короткого периода времени.

Другие распространенные политики перезапуска включают:

  • no: Не перезапускать контейнер автоматически (по умолчанию).
  • on-failure: Перезапускать контейнер только в том случае, если он завершается с ненулевым кодом выхода (указывающим на ошибку). Вы можете дополнительно указать максимальное количество попыток перезапуска (например, on-failure:5).
  • unless-stopped: Всегда перезапускать контейнер, если он не был явно остановлен пользователем или демон Docker не был остановлен.

Давайте попробуем политику on-failure. Остановите и удалите текущий контейнер:

docker stop my-nginx-always
docker rm my-nginx-always

Запустите новый контейнер с политикой on-failure:

docker run -d --name my-nginx-on-failure --restart=on-failure -p 80:80 nginx

Убедитесь, что он запущен:

docker ps

Теперь давайте смоделируем сбой. Мы можем сделать это, выполнив команду внутри контейнера, которая завершается с ненулевым статусом.

docker exec my-nginx-on-failure sh -c "exit 1"

Проверьте статус контейнера через несколько секунд:

docker ps

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

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

Итог (Summary)

В этой лабораторной работе вы узнали, как перезапускать демон Docker (Docker daemon) и отдельные контейнеры. Вы изучили различные методы перезапуска демона с помощью команд systemd и узнали, как перезапускать определенные контейнеры с помощью команды docker restart. Кроме того, вы узнали о политиках перезапуска Docker (Docker's restart policies) и о том, как настроить их для автоматического перезапуска контейнеров на основе различных условий, что повышает доступность ваших приложений. Эти навыки являются основополагающими для эффективного управления средами Docker и устранения неполадок в них.