拓冰建站拓冰建站
首页 / 资讯中心 / 正文

hcsshim快速上手:10分钟用Go调用Host Compute Service创建第一个容器

hcsshim快速上手10分钟用Go调用Host Compute Service创建第一个容器【免费下载链接】hcsshimWindows - Host Compute Service Shim项目地址: https://gitcode.com/gh_mirrors/hc/hcsshim想在 Windows 上直接用 Go 语言管理容器却不知道从哪开始hcsshim 就是微软官方的答案——它是 Windows Host Compute ServiceHCS的 Go 语言接口负责在 Windows 上创建、启动和管理 Windows 容器与 Hyper-V 容器。本教程将带你用最短的路径上手 hcsshim从环境准备、拉取源码到用十几行 Go 代码创建并运行你的第一个容器全程约 10 分钟即可完成。什么是 hcsshim它解决了什么问题Windows 系统本身并不直接提供容器这种抽象真正干活的底层服务叫Host Compute ServiceHCS它是 Windows 上所有容器的总管家。而hcsshim正是封装 HCS 的 Go 库让你不必手写复杂的 JSON 协议、不必直接操作 Windows API就能用熟悉的 Go 代码完成容器的全生命周期管理。hcsshim 还被 MobyDocker和 Containerd 等项目广泛使用稳定性经过了大规模生产环境验证。除此之外它还附带 Host Network ServiceHNS网络接口、Linux 容器LCOW的 Guest Agent 等工具是理解 Windows 容器体系的最佳入口。环境准备3 项前置条件开始之前请确认你的机器满足以下要求检查项要求操作系统Windows 10/11 或 Windows Server 2016已开启容器功能Go 环境Go 1.21 及以上go version可正常输出容器运行时Docker DesktopWindows 容器模式或直接使用 HCS 原生能力小提示hcsshim 的代码带有//go:build windows编译约束因此编译和运行都必须在 Windows 上进行Linux 机器无法完成本教程的实操部分。第 1 步获取 hcsshim 源码1 分钟hcsshim 本身就是一个 Go 模块你可以像普通依赖一样在go.mod中引用它也可以直接克隆完整源码进行学习git clone https://gitcode.com/gh_mirrors/hc/hcsshim cd hcsshim在go.mod中引入依赖go get github.com/Microsoft/hcsshim拿到源码后建议先浏览几个核心文件它们构成了整个库的地基hcsshim.go库的入口定义错误码与顶层类型container.go容器核心 API如CreateContainer、Start、Shutdowninterface.goContainer与Process接口定义internal/hcs/schema1/schema1.goContainerConfig、ProcessConfig等配置结构第 2 步理解核心概念3 分钟上手前先搞懂三个关键概念后面的代码就一目了然HCSHost Compute ServiceWindows 上的系统级服务负责容器的创建、启停与销毁hcsshim 只是它的一层 Go 封装。WCOW 与 LCOWWCOW 指 Windows 容器LCOW 指运行在 Windows 上的 Linux 容器通过轻量级虚拟机 UVM 承载。hcsshim 两者都支持。ContainerConfig创建容器所需的全部配置包括存储层Layers、内存限制、CPU 份额、网络端点等最终会被序列化成 JSON 发给 HCS。下面这段代码就是最精简的容器配置注意SystemType必须固定为Container这是 HCS 的硬性要求config : hcsshim.ContainerConfig{ SystemType: Container, // HCS 要求固定值 Name: my-first-container, HvPartition: false, // false 为进程隔离true 为 Hyper-V 隔离 MemoryMaximumInMB: 1024, ProcessorCount: 2, }第 3 步编写第一个容器程序4 分钟现在动手写一个完整的 Go 程序创建容器 → 启动容器 → 在容器内运行一条命令 → 等待退出。新建main.go内容如下package main import ( fmt log time github.com/Microsoft/hcsshim ) func main() { // 1. 创建容器此时尚未启动 container, err : hcsshim.CreateContainer(demo, hcsshim.ContainerConfig{ SystemType: Container, Name: demo-container, HvPartition: false, ProcessorCount: 1, }) if err ! nil { log.Fatalf(创建容器失败: %v, err) } defer container.Close() // 2. 启动容器 if err : container.Start(); err ! nil { log.Fatalf(启动容器失败: %v, err) } fmt.Println(✅ 容器已成功启动) // 3. 在容器内运行一条命令 process, err : container.CreateProcess(hcsshim.ProcessConfig{ CommandLine: cmd.exe /c echo Hello from hcsshim!, }) if err ! nil { log.Fatalf(创建进程失败: %v, err) } // 4. 等待进程退出并获取退出码 if err : process.WaitTimeout(30 * time.Second); err ! nil { log.Fatalf(等待进程失败: %v, err) } exitCode, _ : process.ExitCode() fmt.Printf(进程退出码: %d\n, exitCode) // 5. 优雅关闭容器 _ container.Shutdown() fmt.Println(容器已关闭演示完成 ) }编译并运行go build -o demo.exe . .\demo.exe第 4 步代码逐行拆解2 分钟整个流程只有 5 个步骤掌握了它你就掌握了容器管理的核心套路方法作用对应生命周期阶段CreateContainer创建容器对象不启动创建Start正式启动容器运行CreateProcess在容器内启动新进程执行命令Shutdown/Terminate优雅关闭 / 强制终止停止Wait/WaitTimeout等待容器或进程结束清理需要注意两点CreateContainer只负责创建而不启动必须显式调用Start()这与 Docker 的create/start两个命令的设计完全一致。Shutdown是异步请求返回后容器可能仍在关闭过程中建议配合Wait()等待真正结束。第 5 步进阶探索方向跑通第一个容器后你可以沿着以下方向继续深入查看容器状态与统计信息调用container.Properties系列方法获取内存、CPU、网络等实时指标接口定义见container.go。管理容器内进程ProcessList可以列出容器内所有进程OpenProcess可以接管已有进程。对接 Containerdhcsshim 提供了cmd/containerd-shim-runhcs-v1和cmd/containerd-shim-lcow-v2两个 shim让 Windows 容器无缝接入 Kubernetes 生态。研究配置细节ContainerConfig中的Layers分层存储、MappedDirectories目录映射、EndpointList网络端点是生产环境中最高频的配置项。常见问题排错Q编译时报错 build constraints exclude all Go filesA说明你在非 Windows 平台编译。请切换到 Windows 环境或使用GOOSwindows go build交叉编译。QCreateContainer返回The parameter is incorrectA通常是ContainerConfig配置不完整最常见的是缺少SystemType字段或Layers存储层信息请对照internal/hcs/schema1/schema1.go逐项检查。Q容器启动后立刻退出A检查ProcessConfig中的CommandLine是否正确并确认容器镜像/基础层已正确配置。写在最后hcsshim 是通往 Windows 容器世界的钥匙10 分钟足以让你跑通创建 → 启动 → 执行 → 关闭的完整闭环。它不仅是 Docker 与 Containerd 在 Windows 上的基石也是你深入理解 Windows 容器底层原理的最佳教材。下一步不妨动手改造上面的示例加上Layers存储层、映射一个目录、或者尝试 Hyper-V 隔离模式你会对 Windows 容器有更直观的认识。如果你希望了解 LCOWLinux 容器如何运行、或者如何让 hcsshim 与 Kubernetes 集成欢迎持续关注后续教程。【免费下载链接】hcsshimWindows - Host Compute Service Shim项目地址: https://gitcode.com/gh_mirrors/hc/hcsshim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门