Как использовать команду docker container restart для управления контейнерами

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь эффективно управлять контейнерами Docker с помощью команды docker restart. Вы начнёте с изучения базового процесса перезапуска работающего контейнера — фундаментальной операции для применения изменений или устранения проблем.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} docker/ps -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} docker/start -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} docker/stop -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} docker/restart -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} docker/pull -.-> lab-555119{{"Как использовать команду docker container restart для управления контейнерами"}} end

Перезапуск работающего контейнера

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

Сначала загрузим образ Nginx для наших примеров. Мы будем использовать образ nginx:latest.

docker pull nginx:latest

Вы увидите вывод, указывающий на загрузку и распаковку образа.

Затем запустим контейнер на основе этого образа. Мы запустим его в фоновом режиме (-d) и присвоим ему имя (--name my-nginx).

docker run -d --name my-nginx nginx:latest

Эта команда запустит контейнер Nginx и выведет его идентификатор.

Чтобы убедиться, что контейнер работает, используйте команду docker ps.

docker ps

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

Теперь перезапустим работающий контейнер с помощью команды docker restart, указав имя контейнера.

docker restart my-nginx

Эта команда остановит контейнер, а затем запустит его снова.

Чтобы подтвердить, что контейнер был перезапущен и снова работает, снова выполните docker ps.

docker ps

Вы снова увидите контейнер my-nginx в списке, а в столбце STATUS будет указано Up с временем, показывающим, что он был недавно запущен.

Перезапуск контейнера с указанным таймаутом

На этом шаге вы узнаете, как перезапустить контейнер Docker с заданным временем ожидания. При перезапуске контейнера Docker отправляет сигнал остановки (по умолчанию SIGTERM) основному процессу в контейнере. Если процесс не завершается в течение определенного времени, Docker отправляет сигнал принудительного завершения (SIGKILL). По умолчанию таймаут составляет 10 секунд. Вы можете изменить это значение с помощью флага -t или --time в команде docker restart.

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

docker ps

Если контейнер не запущен, запустим его снова:

docker start my-nginx

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

docker restart -t 5 my-nginx

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

Для наблюдения эффекта таймаута обычно требуется контейнер, которому нужно больше стандартных 10 секунд для корректного завершения. Однако в данном упражнении мы сосредоточимся на синтаксисе команды.

Попробуем перезапустить с более длительным таймаутом, например 20 секунд.

docker restart --time 20 my-nginx

Снова будет выведено имя контейнера.

Опция -t или --time полезна, когда в контейнерах работают приложения, которым требуется дополнительное время для выполнения операций очистки перед завершением работы.

Чтобы убедиться, что контейнер продолжает работать после перезапуска, используйте docker ps.

docker ps

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

Перезапуск контейнера с указанным сигналом

На этом шаге вы узнаете, как перезапустить контейнер Docker, отправив определенный сигнал основному процессу контейнера. Хотя команда docker restart по умолчанию отправляет сигнал остановки (SIGTERM) с последующим сигналом принудительного завершения (SIGKILL) после таймаута, вам может потребоваться отправить другой сигнал в зависимости от приложения, работающего в контейнере. Этого можно достичь, сначала остановив контейнер с определенным сигналом с помощью docker stop, а затем запустив его снова командой docker start.

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

docker ps

Если он не запущен, запустим его:

docker start my-nginx

Теперь остановим контейнер, отправив сигнал SIGKILL. Этот сигнал немедленно завершает процесс без возможности выполнения каких-либо операций очистки.

docker stop -s SIGKILL my-nginx

Вы увидите имя контейнера, и если выполнить docker ps, контейнер больше не будет отображаться в списке.

docker ps

Контейнер теперь остановлен. Для его перезапуска просто запустим его снова.

docker start my-nginx

Теперь контейнер должен снова работать. Проверим с помощью docker ps.

docker ps

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

Хотя SIGKILL является принудительным сигналом остановки, вы также можете отправлять другие сигналы, такие как SIGHUP или SIGINT, если ваше приложение настроено на их обработку для корректного завершения или перезагрузки. Однако конфигурация контейнера nginx по умолчанию корректно обрабатывает сигнал SIGTERM.

Остановим контейнер еще раз, на этот раз используя сигнал SIGTERM по умолчанию (который используется в docker stop, если сигнал не указан явно).

docker stop my-nginx

Проверим, что он остановлен:

docker ps

Теперь запустим его в последний раз.

docker start my-nginx

Убедимся, что он работает:

docker ps

Комбинируя команды docker stop -s <сигнал> и docker start, вы получаете более детальный контроль над процессом остановки контейнера перед его перезапуском.

Итоги

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

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