docker stop 和 docker kill 命令之間的區別
一、概述
Docker 是一個操作系統級別的軟件框架,用於在服務器和雲中創建、管理和運行容器。 Docker 支持使用兩種不同的方式停止容器。
在本教程中,我們將學習使用docker stop
和docker kill
命令停止和終止容器。
我們將使用不同的 docker 命令來停止和刪除容器。
2. 理解docker stop
和docker kill
命令
啟動和停止容器與啟動和停止正常進程不同。為了終止容器,Docker 提供了docker stop
和docker kill
命令。 docker kill
和docker stop
命令看起來很相似,但是它們的內部執行是不同的。
docker stop
命令發出 SIGTERM 信號,而docker kill
命令發送 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=baeldung -e POSTGRES_PASSWORD=baeldung
-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 stop
命令未能在指定的超時時間內終止進程,則 Docker 會立即隱式發出 kill 命令。在 Docker 中,我們可以通過兩種方式使用docker stop
命令來停止進程。我們可以使用containerId
或容器名稱來停止容器。
讓我們演示使用容器名稱停止容器:
$ docker stop postgresql-baeldung
讓我們舉例說明使用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 container stop
命令在較新版本的 Docker 中已棄用。
3.2. docker kill
命令
docker kill
命令突然終止入口點進程。 docker kill
命令會導致不安全的退出。在某些情況下,docker 容器與主機一起安裝的捲一起運行。如果在主進程停止時內存中仍有待處理的更改,這可能會導致文件系統損壞。
讓我們看看殺死一個容器的命令:
$ docker kill be2848539d76
同樣,要殺死一個容器,我們也可以使用docker container kill
命令:
$ docker container kill be2848539d76
docker container kill
命令的工作方式與docker kill
命令類似。
4. 停止容器的附加命令
docker kill
和docker stop
命令都會停止容器。停止容器的另一種方法是刪除它。我們可以使用docker rm
命令來移除一個容器。這將立即從本地存儲中刪除容器:
$ docker rm be2848539d76
當我們運行docker rm
命令時,容器會從docker ps -a
列表中刪除。在使用docker stop
命令時,我們可以保留容器以供重複使用。理想情況下,我們可以將容器置於兩種狀態。容器可以進入停止或暫停狀態。如果一個容器停止了,它分配的所有資源都會被釋放,而一個被暫停的容器不會釋放內存,而是釋放 CPU。在這種情況下,該過程被暫停。
讓我們看看暫停容器的命令:
$ docker pause be2848539d76
值得注意的是,即使在容器停止後,我們也可以檢查容器的詳細信息。要了解有關容器的更多信息,我們可以使用docker inspect
命令。 docker inspect
命令在容器狀態下顯示容器的退出代碼。使用docker stop
命令停止容器時,退出代碼為 0。同樣, docker kill
命令將容器狀態顯示為非零退出代碼。
5. 結論
在本教程中,我們討論了執行docker stop
和docker kill
命令之間的區別。首先,我們討論了使用不同的命令停止容器。接下來,我們討論了 docker stop 和 docker kill 命令中 SIGTERM 和 SIGKILL 的實現。
我們還探討了這兩個命令的不同選項。後來,我們探索了docker container stop,
和docker container kill
命令。
簡而言之,我們學習了各種停止和殺死 Docker 容器的方法。