Windows 容器平台正在扩展! Docker 是容器旅程的第一部分,现在我们正在构建其他容器平台工具。
- containerd/cri - Windows Server 2019/Windows 10 1809 中的新增功能。
- runhcs - 与 runc 相对应的 Windows 容器主机。
- hcs - 主机计算服务 + 方便填充码,使其更易于使用。
本文将介绍 Windows 和 Linux 容器平台以及每个容器平台工具。
Windows 和 Linux 容器平台
在 Linux 环境中,容器管理工具(如 Docker)基于更精细的容器工具集构建: runc 和 容器化。
runc 是一种 Linux 命令行工具,用于根据 OCI 容器运行时规范创建和运行容器。
containerd 是一个守护程序,用于管理容器生命周期,从下载和解压缩容器映像到容器执行和监督。
在 Windows 上,我们采取了不同的方法。 当我们开始使用 Docker 来支持 Windows 容器时,我们直接在 HCS(主机计算服务)上构建。 此博客文章 包含有关我们生成 HCS 的原因以及我们最初对容器采用此方法的原因的信息。
此时,Docker 仍直接调用 HCS。 但是,今后,扩展为包括 Windows 容器和 Windows 容器主机的容器管理工具可以调用容器化,并按照在 Linux 上调用容器和 runc 的方式调用 runhc。
runhcs
runhcs是一个分叉。runc 同样 runc, runhcs 是一个命令行客户端,用于运行根据开放容器计划 (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 显示容器中运行的进程
用于管理容器状态的工具
- state 输出容器的状态
- kill 将指定的信号(默认值:SIGTERM)发送到容器的初始化进程
- 删除 容器通常与分离容器一起使用的任何资源
唯一可以被视为多容器的命令是 列表。 其中列出了使用给定根的 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 的共享沙盒环境中将容器描述为工作负荷(s)。 Pod 可以包含一个或多个容器工作负荷。 Pod 允许容器业务流程协调程序(如 Kubernetes 和 Service Fabric 网格)处理应位于同一主机上的分组工作负载,这些工作负荷应与某些共享资源(例如内存和 vNET)一起处理。
虽然 runHCS 和容器都可以在任何 Windows 系统 Server 2016 或更高版本上管理,但支持 Pod(容器组)需要对 Windows 中的容器工具进行重大更改。 Windows Server 2019/Windows 10 1809 及更高版本上提供了 CRI 支持。