在 Windows 上的容器

什麼是容器

容器是一種將應用程式封裝在隔離箱內的方式。 對於容器中的應用程式而言,它不了解存在箱外的任何其他應用程式或處理序。 此應用程式順利執行所仰賴的一切也都存放在這個容器內部。 不論這個隔離箱移動到哪裡,都永遠能滿足該應用程式的執行條件,因為它執行所需的一切都封裝在一起。

假設有一間廚房。 我們裝入所有設備和家具、鍋碗瓢盆、清潔劑和抹布。 這是我們的容器。

現在,我們可以將這個容器放入想要的任何主機公寓中,而且它都會是相同的廚房。 我們就可以水電與它連線,並接著我們開始烹飪了 (因為我們擁有我們需要的所有設備) !。

容器與這個廚房十分相似。 可能會有不同種類的房間,也可能會有許多相同種類的房間。 重點在於,容器與它們所需的一切封裝在一起。

觀看簡短的概觀下方:

容器的基礎

容器是一種隔離、由資源控制的可攜式執行階段環境,而且這種環境會在主機電腦或虛擬機器上執行。 在容器中執行的應用程式或處理序會與所有必要的相依性和組態檔封裝在一起,使其產生出容器外部沒有其他執行中的處理序這種錯覺。

容器的主機會為容器佈建一組資源,而且容器只會使用這些資源。 知容器,以外什麼它具有沒有其他資源存在,因此容器無法接觸可能已經佈建給鄰近容器的資源。

在您開始建立及使用 Windows 容器時,下列主要概念將有所幫助。

容器主機: 設定了 Windows 容器功能的實體或虛擬電腦系統。 容器主機將會執行一或多個 Windows 容器。

容器映像: 對容器檔案系統或登錄進行修改時 (例如進行軟體安裝時),會在沙箱中加以擷取。 在許多情況下您都可能會想擷取此狀態,以建立繼承這些變更的新容器。 這就是映像 – 在容器停止後,您可以捨棄該沙箱,或將它轉換成新的容器映像。 例如,我們假設您已從 Windows Server Core OS 映像部署容器。 然後,您將 MySQL 安裝到此容器中。 從這個容器建立新的映像,效果會等同於可部署的容器版本。 此映像只會包含所做的變更 (MySQL),不過其運作會像是在容器 OS 映像之上的層級。

沙箱: 容器啟動後,所有的寫入動作,例如檔案系統修改、登錄修改或軟體安裝,都會擷取至此「沙箱」層中。

容器 OS 映像: 容器會從映像進行部署。 在可能構成容器的眾多映像層中,容器 OS 映像是第一層。 此映像提供作業系統環境。 容器 OS 映像不可變更。 也就是說,無法修改。

容器存放庫: 每當容器映像建立時,容器映像和其相依性即會儲存在本機存放庫中。 這些映像可在容器主機上重複使用多次。 容器映像也可以儲存在公用或私人登錄中 (例如 DockerHub),以便在許多不同的容器主機之間使用。

對於熟悉虛擬機器的人而言,可能會覺得容器極為相似。 容器可像實體或虛擬電腦系統一樣執行作業系統、具有檔案系統,並且可透過網路來存取。 即便如此,容器的基本技術和概念還是與虛擬機器非常不同。

Microsoft Azure 專家 Mark Russinovich 寫過一篇絕佳的部落格文章就詳細說明了兩者的差異。

Windows 容器類型

Windows 容器包含兩種不同的容器類型,或執行階段。

Windows Server 容器 – 透過處理序和命名空間隔離技術,提供應用程式隔離功能。 Windows Server 容器可與容器主機和主機上執行的所有容器共用核心。 這些容器沒有提供惡意防護界限,不應用來隔離未受信任的程式碼。 由於共用核心空間,因此這些容器需要相同的核心版本和組態。

Hyper-V 隔離 – 藉由在高度最佳化的虛擬機器中執行每個容器,擴充 Windows Server 容器所提供的隔離能力。 在此設定中,容器主機的核心不會與相同主機上的其他容器共用。 這些容器的設計是要以虛擬機器的相同安全保證來管控惡意多組織用戶共享。 因為這些容器不會與主機或主機上的其他容器共用核心,所以它們可以執行具有不同版本和設定的核心 (支援的版本) - 例如,Windows 10 上的所有 Windows 容器都會使用 Hyper-V 隔離,以便運用 Windows Server 核心版本和設定。

使用或不使用 Hyper-V 隔離在 Windows 上執行容器是執行階段決策。 您可以選擇一開始使用 Hyper-V 隔離來建立容器,之後在執行階段選擇改以 Windows Server 容器的形式來執行。

什麼是 Docker?

當您閱讀容器的相關資訊時,一定會看到 Docker。 Docker 是用以封裝和傳遞容器映像的器具。 這個自動化處理序會產生映像 (實際上就是範本),而且這些映像能以容器的形式在內部部署、雲端或個人電腦等任何環境中執行。

如同任何其他容器,Windows Server 容器可使用 Docker 管理。

開發人員的容器

從開發人員的桌面,到測試機器,乃至於一組實際執行機器,皆可建立 Docker 映像,進而快速地在任何環境以相同方式部署。 在此發展下,封裝在 Docker 容器中的應用程式建立起大規模且持續增長的生態系統;所使用的是 DockerHub,這是 Docker 所維護的公用容器化應用程式登錄,目前在公用社群儲存機制中發行了超過 180,000 個應用程式。

當您容器化應用程式時,只有應用程式本身和執行應用程式所需的元件會結合到「映像」中。 當您需要時,容器可從這個映像建立。 您也可以將映像當作建立另一個映像的基準,使映像建立更為快速。 多個容器都可以共用相同的映像,這表示容器可非常快速地啟動,並且使用較少的資源。 例如,您可以使用容器來加速分散式應用程式的輕量型和可攜式應用程式元件 (或「微服務」),以及個別地快速調整每個服務。

由於容器本身已包含執行應用程式所需的一切,它們具有高度可攜性,而且可在任何執行 Windows Server 2016 的機器上執行。 您可以在本機建立及測試容器,然後將相同的容器映像部署到公司的私人雲端、公用雲端或服務提供者。 容器既有的靈活性可支援大規模、虛擬化雲端環境中的新型應用程式開發模式。

透過容器,開發人員可使用任何語言建置應用程式。 這些應用程式具有最高的可攜性,而且可在任何位置執行 - 筆記型電腦、桌上型電腦、伺服器、私人雲端、公用雲端或服務提供者,且不需要變更任何程式碼。

容器可協助開發人員更快速地建置及提供更高品質的應用程式。

IT 專業人員的容器

IT 專業人員可以使用容器為其開發、品管及生產小組提供標準化的環境。 他們再也不必擔心複雜的安裝和設定步驟。 藉由使用容器,系統管理員將可抽離 OS 安裝和基礎結構的差異。

容器可協助系統管理員建立更容易更新和維護的基礎結構。

容器協調器

因為容器的容積較小並且是應用程式導向,所以它們很適合用於靈活傳遞的環境和微服務型架構。 不過,當您使用容器和微服務時,您可以輕鬆地在您的環境中擁有數百或數千個元件。 您或許可以手動管理幾十個虛擬機器或實體伺服器,但您卻無法不使用自動化的方式來管理生產規模的容器環境。 自動化及管理大量容器的工作以及其互動的方式稱為協調流程。

協調流程的標準定義包含下列工作:

  • 排程:指定容器映像和資源要求、尋找適合的電腦來執行容器。 親和性/反親和性:指定一組容器應該在彼此附近執行 (為了效能) 或相隔夠遠來執行 (為了可用性)。
  • 健康情況監視:監看容器的失敗事件,並自動重新安排容器排程。
  • 容錯移轉:追蹤每部電腦上執行的項目,並將失敗電腦上的容器重新安排到運作正常的節點。
  • 規模調整:以手動或自動方式新增或移除容器執行個體以符合需求。
  • 網路功能:提供覆疊網路來協調容器跨多個主機電腦進行通訊。
  • 服務探索:讓容器即使在主機電腦間移動並變更 IP 位址也能夠自動找到彼此。
  • 協調應用程式升級:管理容器升級以避免應用程式服務中斷,並在發生錯誤時能夠復原。

Azure 提供兩種容器協調器:Azure Container Service (AKS) 和 Service Fabric。

Azure Container Service (AKS) 可讓您輕鬆建立、設定及管理虛擬機器叢集,這些虛擬機器都已預先設定好,可用於執行容器化應用程式。 這可讓您使用您現有的技術,或運用大量不斷增長的社群專業知識,以在 Microsoft Azure 上部署及管理容器型應用程式。 藉由使用 AKS,您可以利用 Azure 企業級的功能,同時仍能透過 Kubernetes 和 Docker 映像格式來維持應用程式的可攜性。

Azure Service Fabric 是一種分散式系統平台,可讓您輕鬆封裝、部署及管理可調整且可靠的微服務和容器。 Service Fabric 可解決開發及管理雲端原生應用程式時的重要問題。 開發人員和系統管理員可以避免複雜的基礎結構問題,將重心放在實作具有任務關鍵性而需求嚴苛並且是可調整、可靠及可管理的工作負載。 Service Fabric 代表新一代的平台,適用於建置及管理這些在容器中執行的企業級、第 1 層、雲端規模的應用程式。

影片概觀

試用 Windows Server 容器

準備好開始運用容器的強大威力了嗎? 請點選以下連結,開始實際部署您的第一個容器:
若為 Windows Server 使用者,請前往此處 - Windows Server 快速入門簡介
若為 Windows 10 使用者,請前往此處 - Windows 10 快速入門簡介