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

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

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

Введение

В этой лабораторной работе вы научитесь управлять контейнерами Docker с помощью команды docker container kill. Мы начнём с создания и запуска простого контейнера. Затем вы изучите, как остановить работающий контейнер с помощью сигнала по умолчанию. Наконец, вы узнаете, как завершить контейнер с использованием пользовательских сигналов, как по имени, так и по номеру, что даст вам необходимые навыки для контроля жизненного цикла ваших 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/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555111{{"Как использовать команду docker container kill для управления контейнерами"}} docker/ps -.-> lab-555111{{"Как использовать команду docker container kill для управления контейнерами"}} docker/stop -.-> lab-555111{{"Как использовать команду docker container kill для управления контейнерами"}} docker/create -.-> lab-555111{{"Как использовать команду docker container kill для управления контейнерами"}} docker/pull -.-> lab-555111{{"Как использовать команду docker container kill для управления контейнерами"}} end

Создание и запуск простого контейнера

На этом шаге мы научимся создавать и запускать простой Docker-контейнер. Контейнер — это стандартная единица программного обеспечения, которая упаковывает код и все его зависимости, чтобы приложение могло быстро и надежно работать в различных вычислительных средах.

Сначала нам нужно загрузить Docker-образ, который мы будем использовать. Мы возьмём образ ubuntu, представляющий собой минимальную операционную систему Ubuntu.

docker pull ubuntu

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

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

docker run ubuntu echo "Hello from Docker!"

Разберём эту команду:

  • docker run: Команда для запуска нового контейнера.
  • ubuntu: Название образа, который мы используем.
  • echo "Hello from Docker!": Команда, которая будет выполнена внутри контейнера.

При выполнении этой команды Docker создаст новый контейнер из образа ubuntu, выполнит команду echo внутри него, после чего контейнер остановится. В терминале вы должны увидеть вывод Hello from Docker!.

Чтобы увидеть все запущенные контейнеры, включая завершённые, можно использовать команду docker ps -a.

docker ps -a

Эта команда выводит список всех контейнеров — как работающих, так и остановленных. Вы должны увидеть запись о только что запущенном контейнере со статусом "Exited".

Остановка работающего контейнера с помощью сигнала по умолчанию

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

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

docker run -d ubuntu sleep infinity

Разберём команду:

  • docker run: Команда для запуска нового контейнера.
  • -d: Флаг для запуска контейнера в detached mode (в фоновом режиме), что позволяет не блокировать терминал.
  • ubuntu: Используемый образ.
  • sleep infinity: Команда, выполняемая внутри контейнера. sleep infinity заставляет контейнер работать бесконечно.

После выполнения команды Docker выведет ID контейнера. Теперь контейнер работает в фоновом режиме.

Для просмотра работающих контейнеров используйте команду docker ps:

docker ps

Вы должны увидеть запись о только что запущенном контейнере со статусом "Up" и временем работы. Запомните CONTAINER ID или NAMES этого контейнера — они понадобятся для его остановки.

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

Замените <container_id_or_name> на реальный ID или имя вашего контейнера из вывода docker ps:

docker kill <container_id_or_name>

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

Для просмотра остановленного контейнера используйте docker ps -a. Его статус теперь будет "Exited".

Создание и запуск нового контейнера

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

Как и ранее, мы запустим контейнер в detached mode, используя образ ubuntu и команду sleep infinity:

docker run -d ubuntu sleep infinity

Эта команда запустит новый контейнер в фоновом режиме, который будет работать бесконечно. Docker выведет ID нового контейнера.

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

docker ps

В списке должен отображаться новый контейнер со статусом "Up". Запишите CONTAINER ID или NAMES этого контейнера — они понадобятся в следующих шагах для остановки контейнера с использованием различных сигналов.

Теперь контейнер готов для практики отправки различных сигналов.

Остановка контейнера с использованием пользовательского сигнала по имени

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

Команда docker kill позволяет отправить определённый сигнал основному процессу внутри контейнера. По умолчанию отправляется SIGKILL, но вы можете указать другие сигналы. Часто используемый сигнал для плавного завершения приложений — SIGTERM. SIGTERM запрашивает завершение процесса. В отличие от SIGKILL, процессы могут перехватывать SIGTERM и выполнять очистку перед выходом.

Сначала определите ID или имя работающего контейнера из предыдущего шага с помощью docker ps:

docker ps

Теперь используйте команду docker kill с флагом -s для указания имени сигнала. Мы будем использовать SIGTERM. Замените <container_id_or_name> на реальный ID или имя вашего контейнера:

docker kill -s SIGTERM <container_id_or_name>

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

Чтобы проверить, что контейнер остановлен, снова выполните docker ps:

docker ps

Контейнер больше не должен отображаться в списке работающих. Также можно использовать docker ps -a для просмотра его статуса — он должен быть "Exited".

Остановка контейнера с использованием пользовательского сигнала по номеру

На предыдущем шаге мы остановили контейнер, используя имя сигнала (SIGTERM). В этом шаге мы научимся останавливать контейнер, указывая номер сигнала.

Каждый сигнал имеет соответствующий номер. Например, SIGKILL — это сигнал 9, а SIGTERM — сигнал 15. Список сигналов и их номеров можно посмотреть в Linux с помощью команды kill -l:

kill -l

Эта команда выведет список имён сигналов и их соответствующих номеров.

Теперь давайте запустим ещё один контейнер, который будет работать постоянно, как в предыдущих шагах:

docker run -d ubuntu sleep infinity

Получите ID или имя этого нового работающего контейнера с помощью docker ps:

docker ps

Теперь мы используем команду docker kill с флагом -s, но на этот раз укажем номер сигнала вместо имени. Используем сигнал номер 9, который соответствует SIGKILL. Замените <container_id_or_name> на реальный ID или имя вашего контейнера:

docker kill -s 9 <container_id_or_name>

Эта команда отправляет сигнал SIGKILL (номер 9) основному процессу указанного контейнера. Как упоминалось ранее, SIGKILL немедленно завершает процесс.

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

docker ps

Контейнер больше не должен отображаться в списке работающих. Также можно использовать docker ps -a для просмотра его статуса — он должен быть "Exited".

Использование номеров сигналов может быть полезно при написании скриптов или когда требуется точное указание отправляемого сигнала.

Итоги

В этой лабораторной работе мы изучили основные шаги управления контейнерами Docker с помощью команды docker container kill. Мы начали с создания и запуска простого контейнера на основе образа ubuntu, выполнили базовую команду и проанализировали его завершённое состояние с помощью docker ps -a.

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