Windows 容器平臺正在擴充! Docker 是容器旅程中的第一步,現在我們正在開發其他容器平臺工具。
- containerd/cri - 在 Windows Server 2019/Windows 10 1809 中新增的功能。
- runhcs - Runc 的 Windows 容器主機對應專案。
- hcs - 主機計算服務 + 便於使用的小工具。
本文將討論 Windows 和 Linux 容器平臺以及每個容器平臺工具。
Windows 和 Linux 容器平臺
在 Linux 環境中,Docker 之類的容器管理工具是以更細微的一組容器工具為基礎所建置:runc,以及 容器化。
在 LinuxDocker architecture on Linux上Docker 架構
runc
是 Linux 命令行工具,可根據 OCI 容器運行時間規格來建立和執行容器。
containerd
是一個精靈,可管理容器生命週期,從下載和解壓縮容器映射到容器執行和監督。
在 Windows 上,我們採取了不同的方法。 當我們開始使用 Docker 以支援 Windows 容器時,我們直接建置在 HCS (主機計算服務) 上。 此部落格文章 完整說明為何我們建置 HCS,以及我們最初為何對容器採取這種方法。
在 WindowsInitial Docker Engine architecture on Windows上初始 Docker 引擎架構
此時,Docker 仍會直接呼叫 HCS。 未來,容器管理工具將擴展到包含 Windows 容器和 Windows 容器主機,可以像在 Linux 上呼叫 containerd 和 runc 一樣,呼叫 containerd 和 runhcs。
runhcs
runhcs
是 runc
的分叉。 就像 runc
一樣,runhcs
是一個命令行用戶端,可用來執行以 Open Container Initiative (OCI) 格式封裝的應用程式,而且是開放式容器計劃規格的相容實作。
Runc 和 runhcs 之間的功能差異包括:
runhcs
在 Windows 上執行。 它會與 HCS 通訊,以建立和管理容器。runhcs
可以執行各種不同的容器類型。- Windows 和 Linux 的隔離 Hyper-V
- Windows 處理程序容器(容器映像必須與容器主機相符)
用法:
runhcs run [ -b bundle ] <container-id>
<container-id>
是您正在啟動之容器實例的名稱。 名稱在您的容器主機上必須是唯一的。
套件組合目錄 (使用 -b bundle
) 是選擇性的。
如同 runc,容器是使用套件組合來設定。 容器的套件組合是具有容器 OCI 規格檔案的目錄,“config.json”。 “bundle” 的預設值是目前目錄。
OCI 規格檔案「config.json」必須有兩個字段才能正確執行:
- 容器臨時空間的路徑
- 容器層目錄的路徑
runhcs 中可用的容器命令包括:
用來建立和執行容器的工具
- 執行 建立和執行容器
- 建立 建立容器
用來管理容器中執行的程序的工具:
- 開始 在建立的容器中執行使用者定義進程
- exec 在容器內執行新進程
- 暫停 暫停容器內的所有進程
- 繼續 將恢復先前暫停的所有進程
- ps ps 會顯示在容器內執行的進程
用來管理容器狀態的工具
- 狀態 輸出容器的狀態
- 終止 將指定的訊號(預設值:SIGTERM)傳送至容器的 init 進程
- 刪除 用於刪除容器所持有的任何資源,通常與分離的容器一起使用。
唯一可以視為多容器的命令是 清單。 它會列出由 runhcs 使用指定根目錄啟動的執行中或已暫停的容器。
HCS
GitHub 上有兩個包裝函式可供與 HCS 介面。 由於 HCS 是 C API,包裝函式可讓您輕鬆地從較高層級的語言呼叫 HCS。
- hcsshim - HCSShim 是以 Go 撰寫,這是 runhcs 的基礎。 從 AppVeyor 擷取最新的,或自行建置。
- dotnet-computevirtualization - dotnet-computevirtualization 是 HCS 的 C# 包裝函式。
如果您想要使用 HCS(直接或透過包裝函式),或想要在 HCS 周圍建立 Rust/Haskell/InsertYourLanguage 包裝函式,請留下批注。
如需深入瞭解 HCS,請觀看 John Stark 的 DockerCon 簡報。
containerd/cri
重要
CRI 支援僅適用於 Windows Server 2019/Windows 10 1809 和更新版本。
雖然 OCI 規格會定義單一容器,CRI (容器運行時間介面) 會將容器描述為稱為 Pod 的共用沙盒環境中工作負載。 Pod 可包含一個或多個容器工作負載。 Pod 可讓 Kubernetes 和 Service Fabric Mesh 等容器協調器處理那些應與記憶體、vNET 等共用資源一起位於同一主機上的群組工作負載。
雖然 runHCS 和 containerd 兩者都可以在任何 Windows 系統 Server 2016 或更新版本上管理,但支援 Pod(容器群組)需要對 Windows 中的容器工具進行重大變更。 Windows Server 2019/Windows 10 1809 和更新版本提供 CRI 支援。