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.