👀掌控Docker容器生命脈絡:dockerstart、stop、restart、kill與wait命令詳解與實戰示例

字節碼在跳舞 2024-04-13 15:43:30

docker start:啓動容器

docker stop:優雅地停止容器

docker restart:重啓容器

docker kill: 結束容器

docker wait: 等待容器停止,並退出狀態

這些命令都直接涉及到容器運行狀態的變更和監控,屬于容器生命周期管理的核心操作。將它們放在同一部分討論,有助于讀者理解如何控制容器的終止過程以及如何同步地處理容器停止後的後續操作。

1.docker start:啓動容器

docker start命令用于啓動一個或多個已停止的 Docker 容器。當需要恢複先前停止的服務、重新啓動測試環境、繼續進行未完成的任務或在維護後恢複容器運行時,此命令提供了便捷的容器啓動機制。以下是使用docker start命令啓動hello-go容器的示例:

假設有一個已停止的名爲hello-go的容器,您希望將其啓動,您可以使用以下命令:

➜  ~ docker start hello-go

在這條命令中,hello-go是您要啓動的已停止容器的名稱。執行命令後,Docker 會重新啓動該容器,使其進入運行狀態。容器內的主進程將恢複執行,服務或應用程序將再次對外提供服務。

2.docker stop:優雅地停止容器

docker stop命令用于優雅地停止一個或多個正在運行的 Docker 容器。在需要暫停服務、進行計劃內維護、節約資源、或者遵循特定的業務流程時,此命令提供了安全、有序的容器停止機制。以下是使用docker stop命令停止hello-go容器的示例:

假設您有一個正在運行的名爲hello-go的容器,您希望將其停止。您可以使用以下命令:

➜  ~ docker stop hello-go

在這條命令中,hello-go是您要停止的正在運行容器的名稱。執行命令後,Docker 會向容器內的主進程發送SIGTERM信號,請求其優雅地停止。大多數應用程序在接收到SIGTERM信號後,會開始清理資源、保存狀態,並在完成這些操作後自行退出。如果容器內的主進程在指定的超時時間內(默認爲 10 秒)仍未退出,Docker 將發送SIGKILL信號強制終止容器。

3.docker restart:重啓容器

docker restart命令用于重啓一個或多個已運行或已停止的 Docker 容器。在需要刷新容器狀態、應用配置更改、恢複故障服務或執行定期維護時,此命令提供了快速、便捷的容器重啓機制。以下是使用docker restart命令重啓hello-go容器的示例:

無論hello-go容器當前是運行中還是已停止狀態,您都可以使用以下命令重啓它:

➜  ~ docker restart hello-go

在這條命令中,hello-go是您要重啓的容器的名稱。執行命令後,Docker 會執行以下操作:

停止容器(如果正在運行):向容器內的主進程發送SIGTERM信號,請求其優雅地停止。若容器在指定超時時間內(默認爲 10 秒)未退出,Docker 將發送SIGKILL信號強制終止容器。

啓動容器:在容器停止後,Docker 會重新啓動該容器。容器內的主進程將恢複執行,服務或應用程序將再次對外提供服務。

4.docker kill: 結束容器

docker kill命令爲運維人員提供了即時、強制結束一個或多個運行中容器的能力。在遇到容器無響應、資源占用過高、需緊急下線服務等場景時,此命令能夠迅速切斷容器的運行狀態。由于其非優雅終止的特性,應結合使用docker stop(優雅停止)和其他管理命令,以實現對容器生命周期的最佳管理。

➜  ~ docker kill hello-go

在這條命令中,hello-go是您要終止的容器名稱。執行命令後,Docker 會向容器發送默認的SIGKILL信號,強制結束容器內的所有進程,從而停止容器運行。用docker kill命令時,容器內的應用程序可能無法完成必要的清理或保存狀態操作,可能導致數據丟失或不一致。在涉及關鍵數據或需要確保服務平滑過渡的場景中,應優先考慮使用docker stop命令。

5.docker wait: 等待容器停止,並退出狀態

docker wait命令用于同步阻塞當前命令行,直至指定的容器停止運行,並在容器退出後返回其退出狀態碼。這一特性使得docker wait成爲自動化腳本、持續集成/持續部署(CI/CD)流程、多容器協調任務、資源管理以及測試與調試環境中的關鍵工具,爲管理和監控容器生命周期提供了可靠的同步點和狀態反饋機制。

➜  ~ docker wait hello-go

運行該命令,hello-go會阻塞當前命令行。

打開另一個命令行運行

➜  ~ docker stop hello-gohello-go

回到docker wait hello-go命令行

➜  ~ docker wait hello-go2

這時候輸出了2。

狀態碼:

0: 正常退出,無錯誤。

1-127: 非正常退出,通常表示程序運行時遇到錯誤。

128+n: 由信號n導致的退出,如137表示接收到SIGKILL信號而被強制終止。

本文探討了五項關鍵的Docker容器生命周期管理命令:docker start、stop、restart、kill和wait,並通過示例詳細展示了每項命令的使用場景、操作方式及預期效果。這些命令共同構成了對容器運行狀態進行精細控制的核心工具集,爲容器的啓動、停止、重啓、強制終止以及狀態同步提供了強大支持,助力用戶高效、安全地管理容器化應用的全生命周期。

忍不住要加個關注!不是我吹,但你會後悔沒關注的!

0 阅读:8

字節碼在跳舞

簡介:分享學習筆記、知識。