對企業開發人員來說,確保應用程式在不同環境 (從本機筆電到開發用伺服器和正式環境基礎架構) 中穩定且一致地運作,是一項常見的難題。容器化是作業系統虛擬化的一種形式,可直接解決這個問題。這種方法是將應用程式及其所有依附元件 (例如程式庫和設定檔) 封裝成單一、獨立且可執行的單元,也就是容器。這種做法可提供一致的環境,確保在開發階段可行的內容,在正式環境中也能正常運作。
容器化是一種軟體部署程序,可將應用程式的程式碼與執行所需的所有檔案和程式庫搭配成套。
這個獨立封裝的套件又稱「容器」,由於不需要專屬的客體作業系統,因此輕巧且可攜。容器會共用主機作業系統的核心,並在各自獨立的使用者空間中執行。這種隔離機制代表您可以在單一主機上執行多個容器,每個容器都有自己的依附元件,不必擔心彼此衝突。
容器化環境採用分層架構,從底層硬體一路往上到應用程式本身。
容器化開發作業會依循有邏輯的逐步程序進行,將應用程式從原始碼轉換為獨立執行個體。
首先,開發人員會建立檔案 (通常是 Dockerfile)。這個檔案就像一套食譜或一組說明,用於建構應用程式的環境,其中包含所有必要資訊,包括:
|
開發人員會按照檔案中的指示,使用指令建立容器映像檔。這個映像檔是靜態、無法變更且可攜的檔案,可做為應用程式的獨立藍圖。它會將應用程式程式碼和所有依附元件封裝成單一分層套件。您可以將映像檔視為物件導向程式設計中的一個類別,也就是用於建立執行中執行個體的範本。
建構完成後,容器映像檔會推送至 Container Registry。註冊資料庫是中央存放區,用於儲存及管理映像檔。企業必須使用私密且安全的註冊資料庫,例如 Google 的 Artifact Registry。將映像檔儲存在註冊資料庫中,可讓團隊輕鬆共用、進行版本管控,並從正式環境中的任何伺服器存取。
最後一步是建立映像檔的執行個體 (也就是容器本身)。系統會將指令傳送至容器引擎,從註冊資料庫執行特定映像檔。接著,引擎會使用主機作業系統的核心來執行下列動作:
|
容器化是現代雲端運算的基礎技術,可支援各種架構模式。
概念 | 容器化的說明和作用 |
容器化是微服務架構的理想部署模型。每個容器都封裝了單一獨立服務,讓團隊能自主開發、部署及擴充服務。 | |
容器可簡化將舊版應用程式遷移至雲端的程序。只要將應用程式「lift-and-shift」至容器,就能讓應用程式可攜,並在任何雲端供應商的基礎架構上執行。 | |
容器的可攜性可確保應用程式在地端部署資料中心和公有雲環境中穩定運作,是順暢執行混合雲策略的關鍵。 | |
這類雲端服務模型 (例如 Google Kubernetes Engine (GKE)) 可自動調度及管理容器,為您省去所有基礎架構管理工作,讓開發人員專心建構應用程式。 | |
容器可讓您進一步控管作業環境和語言執行階段,而無伺服器則提供更高層次的抽象機制,無需管理伺服器。這兩種模式都有效,而且可以一起使用。(例如:容器通常用於執行無伺服器工作負載)。舉例來說,Cloud Run 採用容器化和無伺服器模式,讓您在無伺服器環境中部署容器映像檔。 | |
虛擬化涉及建立完整的虛擬機器,包括專屬的客體 OS 和虛擬化硬體。容器化會將作業系統虛擬化,共用主機 OS 核心,使容器更輕量,啟動速度也更快。 | |
容器映像檔的一致性,讓企業能在多個地理區域部署完全相同的應用程式構件,確保高準確度。這有助於確保應用程式行為一致,並簡化全球使用者的管理作業。 |
概念
容器化的說明和作用
容器化是微服務架構的理想部署模型。每個容器都封裝了單一獨立服務,讓團隊能自主開發、部署及擴充服務。
容器可簡化將舊版應用程式遷移至雲端的程序。只要將應用程式「lift-and-shift」至容器,就能讓應用程式可攜,並在任何雲端供應商的基礎架構上執行。
容器的可攜性可確保應用程式在地端部署資料中心和公有雲環境中穩定運作,是順暢執行混合雲策略的關鍵。
這類雲端服務模型 (例如 Google Kubernetes Engine (GKE)) 可自動調度及管理容器,為您省去所有基礎架構管理工作,讓開發人員專心建構應用程式。
容器可讓您進一步控管作業環境和語言執行階段,而無伺服器則提供更高層次的抽象機制,無需管理伺服器。這兩種模式都有效,而且可以一起使用。(例如:容器通常用於執行無伺服器工作負載)。舉例來說,Cloud Run 採用容器化和無伺服器模式,讓您在無伺服器環境中部署容器映像檔。
虛擬化涉及建立完整的虛擬機器,包括專屬的客體 OS 和虛擬化硬體。容器化會將作業系統虛擬化,共用主機 OS 核心,使容器更輕量,啟動速度也更快。
容器映像檔的一致性,讓企業能在多個地理區域部署完全相同的應用程式構件,確保高準確度。這有助於確保應用程式行為一致,並簡化全球使用者的管理作業。
可攜性和一致性
容器化的主要優點是「建構一次即可隨處執行」的能力。容器會將應用程式及其依附元件封裝在一起,因此能建立可預測且一致的環境。這種一致性有助於消除常見的「在我的設備上可以運作」問題,確保應用程式在開發、測試和正式環境中的行為相同,無論底層基礎架構為何。
提高速度和靈活性
容器比傳統虛擬機器輕量許多,因為不需要自己的訪客作業系統。因此,容器能在幾秒內啟動和停止,而非幾分鐘,大幅加快開發週期,並實現更靈活的 CI/CD 管道。加快建構和部署速度,讓團隊能更快疊代應用程式。
提升資源效率
容器的負擔較低,因此能提高資源使用率。您可以在單一主機作業系統上執行多個容器,因此密度比 VM 高。透過這種有效率的「分裝」做法將應用程式裝入伺服器,讓企業減少伺服器佔據空間,並降低相關基礎架構成本。
程序和依附元件隔離
每個容器都會在各自獨立的使用者空間中執行,並有自己的程序樹狀圖和網路介面。這種隔離機制可確保容器化應用程式的程式庫和依附元件,不會與在同一主機上執行的其他容器化應用程式發生衝突。這項技術可簡化依附元件管理作業,並透過限制遭入侵應用程式的潛在影響,提升安全性。
簡化營運管理
容器化可將部署單位標準化。營運團隊可以管理容器,而不是整部機器或獨特的應用程式堆疊。這種統一做法可簡化部署、資源調度和監控作業,並透過 Kubernetes 等自動化調度管理平台,為強大的自動化功能奠定基礎。
快速擴充
容器輕量且啟動速度快,適合需要快速調度資源的應用程式。當應用程式的需求量突然增加時,可近乎立即佈建新的容器執行個體來處理負載。這種彈性擴充性可確保應用程式保持回應能力和可用性,免去大量人工作業。
容器生態系統由多種工具組成,這些工具會相互搭配運作。