共用方式為


Windows 上的容器平臺工具

Windows 容器平臺正在擴充! Docker 是容器旅程中的第一步,現在我們正在開發其他容器平臺工具。

本文將討論 Windows 和 Linux 容器平臺以及每個容器平臺工具。

Windows 和 Linux 容器平臺

在 Linux 環境中,Docker 之類的容器管理工具是以更細微的一組容器工具為基礎所建置:runc,以及 容器化

在 LinuxDocker architecture on LinuxDocker architecture on Linux上Docker 架構

runc 是 Linux 命令行工具,可根據 OCI 容器運行時間規格來建立和執行容器。

containerd 是一個精靈,可管理容器生命週期,從下載和解壓縮容器映射到容器執行和監督。

在 Windows 上,我們採取了不同的方法。 當我們開始使用 Docker 以支援 Windows 容器時,我們直接建置在 HCS (主機計算服務) 上。 此部落格文章 完整說明為何我們建置 HCS,以及我們最初為何對容器採取這種方法。

在 WindowsInitial Docker Engine architecture on WindowsInitial Docker Engine architecture on Windows上初始 Docker 引擎架構

此時,Docker 仍會直接呼叫 HCS。 未來,容器管理工具將擴展到包含 Windows 容器和 Windows 容器主機,可以像在 Linux 上呼叫 containerd 和 runc 一樣,呼叫 containerd 和 runhcs。

runhcs

runhcsrunc的分叉。 就像 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 支援。