引言
Docker 容器作為一種輕量級虛擬化技術,在現代應用開發和部署中扮演著重要角色。理解容器的生命週期對於有效地管理和運維容器化應用至關重要。本文將深入探討 Docker 容器的生命週期,從建立到銷燬的各個階段,幫助讀者更好地掌握容器管理的核心概念。
一、Docker 簡介和基本概念
1.1 Docker 容器
Docker 是一個開源的容器化平臺,旨在幫助開發人員更輕鬆地構建、部署和執行應用程式。它利用容器技術,將應用程式及其所有依賴項打包成一個獨立的單元,使其在任何環境中都能一致執行。
Docker 容器是 Docker 映象的一個例項化執行,它是一個輕量級的、可執行的軟體包,包含了執行應用程式所需的所有內容:程式碼、執行時、系統工具、系統庫等。容器隔離了應用程式與其它容器及主機系統,使其能在一個獨立的環境中執行。Docker 映象是容器的模板,是一個只讀的模板,包含了執行應用程式所需的所有內容。可以將映象看作是容器的原始碼,透過它可以建立多個相同的容器例項。
1.2 Docker 容器生命週期
Docker 容器使用特定命令,將當前容器從一種狀態轉為另一種狀態,使當前容器處於不同的狀態。Docker 容器生命週期可分為已建立(Created)、執行中(Running)、停止(Stopped)、暫停中(Paused)以及刪除(Deleted)等幾種。 以下為生命週期狀態轉換圖例:
Docker 容器的生命週期涵蓋了七個關鍵階段、五種狀態,每個階段都有其特定的目標和操作。
序號 | 生命週期 | 說明 |
---|---|---|
1 | 建立(Create) | 在容器的生命週期中,建立是第一個關鍵階段。 在這個階段,我們選擇適當的 Docker 映象作為容器的基礎,並使用 Docker 命令來建立容器例項。 容器的配置選項和環境變數設定也在這個階段完成。 |
2 | 啟動(Start) | 一旦容器被成功建立,就可以進入啟動階段。啟動已建立的容器,使其處於執行狀態。 |
3 | 執行(Run) | 容器的執行階段是其生命週期的核心。在此階段,在容器中執行應用程式,處理請求等。 |
4 | 暫停 | 在某些情況下,我們可能需要暫停容器的執行,而不是完全停止它。 暫停容器會凍結其狀態,包括應用程式的程序。容器的資源消耗會暫時減少,但狀態仍然保留在記憶體中。 |
5 | 繼續 | 當需要時,我們可以將容器從暫停狀態切換回執行狀態,使應用程式繼續處理請求。 |
6 | 停止(Stop) | 停止正在執行的容器,但並不會刪除它。 在停止階段,容器會被正常關閉,應用程式會完成清理工作並釋放資源。 |
7 | 刪除(Delete) | 當我們確定不再需要特定容器時,可以從系統中刪除已停止的容器例項。 |
綜上所述,全面瞭解 Docker 容器的生命週期各個階段對於有效地管理容器化應用至關重要。透過適當地執行每個階段的操作,我們可以確保應用程式的可靠性和穩定性,並更好地應對容器化應用開發和運維的挑戰。
二、Docker 容器生命週期狀態
2.1 Created: 已建立
建立容器是 Docker 容器生命週期的首要階段。在這一階段,我們需要明確選擇一個合適的 Docker 映象作為容器的基礎,一個良好的映象選擇可以確保容器內應用的穩定和正確執行。
docker create [映象名稱|映象ID]
使用
docker create nginx
會基於NGINX建立一個容器,結果狀態為已建立狀態(created)。
2.2 Running: 執行中
啟動容器是容器生命週期的關鍵步驟之一,使用 Docker 命令啟動(或執行)容器
# 啟動容器 docker start [容器名稱|容器ID] docker run [容器名稱|容器ID]
使用
docker start |容器ID]
啟動指定ID的容器,結果狀態為已執行狀態(running)。使用
docker run -d nginx
會基於NGINX建立並執行一個容器,結果狀態也為已執行狀態(running)。
2.3 Stopped: 停止
在容器的生命週期中,停止和重啟容器是兩個重要的操作,用於管理容器的執行狀態和應用程式的執行。在容器執行過程中,合理地使用停止和重啟操作可以確保應用程式的正常關閉和重新啟動,避免資料丟失和不穩定的狀態。透過這些操作,我們可以更好地管理容器的生命週期。
# 優雅地停止容器 docker stop [容器名稱|容器ID] # 立即強制停止容器 docker kill [容器名稱|容器ID] # 重啟容器 docker restart [容器名稱|容器ID]
使用
docker stop [容器ID]
將停止指定ID的容器,結果狀態為已執行狀態(stopped)。
2.4 Paused: 暫停中
在容器執行時,我們可以選擇將容器暫停,以凍結容器的狀態。暫停容器可以保留容器的當前狀態,同時釋放部分資源。當需要時,我們可以恢復容器的執行狀態,使應用程式繼續執行。
# 暫停容器 docker pause [容器名稱|容器ID] # 繼續容器 docker unpause [容器名稱|容器ID]
使用
docker pause [容器ID]
將暫停指定ID的容器,結果狀態為已暫停狀態(pause)。暫停狀態容器可以使用unpause
恢復執行狀態。使用
docker unpause [容器ID]
將恢復指定ID的容器為執行狀態,結果狀態為執行狀態(running)。
透過暫停和繼續容器,可以在一定程度上控制容器的資源使用,同時保留容器的狀態。這在某些場景下可能會非常有用,例如需要暫時釋放資源以應對其他任務的情況,或者在容器內發生故障時,凍結容器狀態以便進行故障排查。
2.5 Deleted: 刪除
在容器的生命週期中,當我們確定某個容器不再需要時,可以選擇將其刪除,以釋放資源並保持環境整潔。這將會徹底刪除指定的容器,包括其狀態、資料以及所有相關資訊。需要注意的是,刪除容器不會影響映象本身,映象將保留在系統中供其他容器使用。
docker rm [容器名稱|容器ID]
直接刪除執行中容器,會彈出警告錯誤。返回資訊告訴你,需先停止容器,纔可以刪除。或者使用-f引數進行強制刪除。先使用 docker stop [容器ID]
停止指定ID容器,再使用 docker rm [容器ID]
刪除指定ID的容器,結果狀態為刪除狀態(deleted)。
三、結語
以上就是 Docker 的生命週期的幾種狀態、狀態間的轉換說明,在本文中,我們探討了容器生命週期的每個階段,從建立、啟動、執行,到暫停、繼續、停止和刪除。學習 Docker,掌握生命週期,對於學習 Docker,至關重要。透過對容器的各個生命週期階段進行深入的瞭解,我們能夠更好地構建穩定、可靠的容器化應用,從而提高開發和運維的效率。