Перейти к основному содержимому

Разница между командами docker stop и docker kill

· 5 мин. чтения

1. Обзор

Docker — это программная среда уровня ОС, используемая для создания, управления и запуска контейнеров на серверах и в облаке. Docker поддерживает остановку контейнера двумя разными способами.

В этом руководстве мы научимся останавливать и убивать контейнер с помощью команд docker stop и docker kill .

Мы будем использовать разные команды docker для остановки и удаления контейнера.

2. Понимание команд docker stop и docker kill

Запуск и остановка контейнера — это не то же самое, что запуск и остановка обычного процесса. Для завершения контейнера Docker предоставляет команды docker stop и docker kill . Обе команды docker kill и docker stop выглядят одинаково, но их внутреннее выполнение отличается.

Команды остановки докера выдают сигнал SIGTERM, тогда как команды уничтожения докера отправляют сигнал SIGKILL. Выполнение SIGTERM и SIGKILL . отличается. В отличие от SIGKILL, SIGTERM изящно завершает процесс, а не уничтожает его немедленно. Сигнал SIGTERM можно обрабатывать, игнорировать или блокировать, но сигнал SIGKILL нельзя заблокировать или обработать. SIGTERM позволяет дочернему процессу или родительскому процессу отправлять информацию другим процессам.

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

3. Выполнение команды docker stop и docker kill

Прежде чем мы перейдем к изучению команд docker stop и docker kill , давайте сначала запустим пример контейнера Postgres Docker:

$ docker run -itd -e POSTGRES_USER=foreach -e POSTGRES_PASSWORD=foreach
-p 5432:5432 -v /data:/var/lib/postgresql/data --name postgresql-baedlung postgres
Unable to find image 'postgres:latest' locally
latest: Pulling from library/postgres
214ca5fb9032: Pull complete
...
95df4ec75c64: Pull complete
Digest: sha256:2c954f8c5d03da58f8b82645b783b56c1135df17e650b186b296fa1bb71f9cfd
Status: Downloaded newer image for postgres:latest
0aece936b317984b5c741128ac88a891ffc298d48603cf23514b7baf9eeb981a

Давайте проверим детали контейнера:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be2848539d76 postgres "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp postgresql-baedlung

Команда docker ps выводит список всех запущенных процессов на хост-компьютере.

3.1. команда остановки докера

Команда docker stop изящно останавливает контейнер и обеспечивает безопасный выход. Если команда docker stop не может завершить процесс в течение указанного времени ожидания, Docker неявно и немедленно выдает команду kill. В Docker есть два способа использовать команду docker stop для остановки процесса. Мы можем использовать containerId или имя контейнера, чтобы остановить контейнер.

Давайте продемонстрируем, как остановить контейнер, используя имя контейнера:

$ docker stop postgresql-foreach

Давайте проиллюстрируем, как остановить контейнер с помощью containerId :

$ docker stop be2848539d76

Интересно, что мы также можем использовать префикс containerId для запуска или остановки контейнера. Здесь нам просто нужно убедиться, что ни один другой контейнер не запущен с «be» в качестве начального containerId :

$ docker stop be

По умолчанию команда docker stop ждет 10 секунд, чтобы завершить процесс. Но мы можем настроить время ожидания с помощью опции -t :

$ docker stop -t 60 be2848539d76

Здесь контейнер будет ждать 60 секунд, прежде чем принудительно удалить контейнер. Мы также можем остановить контейнер с помощью команды docker container stop :

$ docker container stop -t 60 be2848539d76

Обе команды работают одинаково. Команда остановки контейнера docker устарела в более новой версии Docker.

3.2. команда уничтожения докера

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

Давайте рассмотрим команду для уничтожения контейнера:

$ docker kill be2848539d76

Точно так же, чтобы убить контейнер, мы также можем использовать команду docker container kill :

$ docker container kill be2848539d76

Команда docker kill kill работает аналогично команде docker kill .

4. Дополнительные команды для остановки контейнера

Обе команды docker kill и docker stop останавливают контейнер. Еще один способ остановить контейнер — просто удалить его. Мы можем использовать команду docker rm для удаления контейнера. Это немедленно удалит контейнер из локального хранилища:

$ docker rm be2848539d76

Когда мы запускаем команду docker rm , контейнер удаляется из списка docker ps -a . При использовании команды docker stop мы можем сохранить контейнер для повторного использования. В идеале мы можем поставить контейнер в два состояния. Контейнер может находиться в остановленном или приостановленном состоянии. Если контейнер останавливается, все выделенные ему ресурсы освобождаются, в то время как приостановленный контейнер освобождает не память, а ЦП. В этом случае процесс приостанавливается.

Давайте проверим команду для приостановки контейнера:

$ docker pause be2848539d76

Примечательно, что мы можем проверить детали контейнера даже после его остановки. Чтобы узнать больше о контейнере, мы можем использовать команду docker inspect . Команда docker inspect показывает код выхода контейнера в статусе контейнера. Код выхода равен 0, когда контейнер останавливается с помощью команды docker stop . Точно так же команда docker kill показывает состояние контейнера как ненулевой код выхода.

5. Вывод

В этом руководстве мы обсудили разницу между выполнением команды docker stop и docker kill . Во-первых, мы обсудили остановку контейнера с помощью другой команды. Далее мы обсудили реализацию SIGTERM и SIGKILL в командах docker stop и docker kill.

Мы также изучили различные варианты обеих команд. Позже мы изучили команду docker container stop и docker kill .

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