apple/containerization

GitHub: apple/containerization

Apple 官方推出的 Swift 库,在 macOS 上通过轻量级虚拟机运行 Linux 容器,实现亚秒级启动。

Stars: 8379 | Forks: 257

# 容器化 Containerization 包允许应用程序使用 Linux 容器。 Containerization 使用 [Swift](https://www.swift.org) 编写,并在 Apple silicon 上使用 [Virtualization.framework](https://developer.apple.com/documentation/virtualization)。 Containerization 提供以下 API: - [管理 OCI 镜像](./Sources/ContainerizationOCI/)。 - [与远程注册表交互](./Sources/ContainerizationOCI/Client/)。 - [创建和填充 ext4 文件系统](./Sources/ContainerizationEXT4/)。 - [与 Netlink 套接字族交互](./Sources/ContainerizationNetlink/)。 - [创建经过优化的 Linux 内核以实现快速启动](./kernel/)。 - [生成轻量级虚拟机并管理运行时环境](./Sources/Containerization/LinuxContainer.swift)。 - [生成容器化进程并与之交互](./Sources/Containerization/LinuxProcess.swift)。 - 使用 Rosetta 2 在 Apple silicon 上运行 linux/amd64 容器。 请查看 [API 文档](https://apple.github.io/containerization/documentation/) 以获取有关 Containerization 提供的 Swift 包的信息。 ## 设计 Containerization 在其自己的轻量级虚拟机内执行每个 Linux 容器。客户端可以为每个容器创建专用 IP 地址,从而无需单独的端口转发。通过优化的 [Linux 内核配置](/kernel)和带有轻量级 init 系统的最小 root 文件系统,容器可以实现亚秒级的启动时间。 [vminitd](/vminitd) 是一个小型 init 系统,它是 Containerization 的一个子项目。 `vminitd` 作为虚拟机内的初始进程生成,并通过 vsock 提供 GRPC API。 该 API 允许配置运行时环境并启动容器化进程。 当进程运行时,`vminitd` 向调用进程提供 I/O、信号和事件。 ## 需求 要构建 Containerization 包,您需要: - 配备 Apple silicon 的 Mac - macOS 26 - Xcode 26 不支持旧版本的 macOS。 ## 示例用法 有关如何使用部分库接口的示例,`cctl` 可执行文件是一个很好的起点。此应用程序是探索 API 的实用演练场。它包含一些命令,用于演练各产品的部分核心功能,例如: 1. [操作 OCI 镜像](./Sources/cctl/ImageCommand.swift) 2. [登录容器注册表](./Sources/cctl/LoginCommand.swift) 3. [创建 root 文件系统块](./Sources/cctl/RootfsCommand.swift) 4. [运行简单的 Linux 容器](./Sources/cctl/RunCommand.swift) ## Linux 内核 在 macOS 上生成轻量级虚拟机需要 Linux 内核。 Containerization 提供了一个优化的内核配置,位于 [kernel](./kernel) 目录中。 该目录包含一个容器化的构建环境,以便轻松编译与 Containerization 配合使用的内核。 该内核配置是一组最小功能集,旨在支持快速启动时间和轻量级环境。 虽然此配置适用于大多数工作负载,但我们理解有些场景需要额外功能。 为了解决此问题,Containerization 提供了一流的 API,支持在每个容器的基础上使用不同的内核配置和版本。 这使得能够在不同的内核版本上开发和验证容器。 请参阅内核目录中的 [README](/kernel/README.md) 以获取有关如何编译优化内核的说明。 ### 内核支持 Containerization 允许用户提供内核,但从内核版本 `6.14.9` 开始测试功能。 ### 预构建内核 如果您希望使用预构建的内核,请确保其已将 `VIRTIO` 驱动程序编译到内核中(而不仅仅是作为模块)。 [Kata Containers](https://github.com/kata-containers/kata-containers) 项目提供了一个为容器优化的 Linux 内核,并启用了所有必需的配置选项。[releases](https://github.com/kata-containers/kata-containers/releases/) 页面包含可下载的构件,镜像本身(`vmlinux.container`)可以在 `/opt/kata/share/kata-containers/` 目录中找到。 ## 准备构建包 安装推荐版本的 Xcode。 将活跃开发者目录设置为已安装的 Xcode(替换 ``): ``` sudo xcode-select -s ``` 安装 [Swiftly](https://github.com/swiftlang/swiftly)、[Swift](https://www.swift.org) 和 [Static Linux SDK](https://www.swift.org/documentation/articles/static-linux-getting-started.html): ``` make cross-prep ``` 如果您使用自定义终端应用程序,可能需要将此命令从 `.zprofile` 移动到 `.zshrc`(替换 ``): ``` # Added by swiftly . "/Users//.swiftly/env.sh" ``` 重启终端应用程序。确保此命令返回 `/Users//.swiftly/bin/swift`(替换 ``): ``` which swift ``` 如果您之前安装或使用过 Static Linux SDK,可能需要从系统中移除较旧的 SDK 版本(替换 ``): ``` swift sdk list swift sdk remove ``` ## 构建包 从源代码构建 Containerization: ``` make all ``` ## 测试包 构建完成后,运行基本测试和集成测试: ``` make test integration ``` 运行集成测试需要内核。 如果您本地没有可用的内核,可以使用 `make fetch-default-kernel` 目标获取默认内核。 获取默认内核仅需在初次构建后或执行 `make clean` 后进行。 ``` make fetch-default-kernel make all test integration ``` ## Protobufs Containerization 依赖于特定版本的 `grpc-swift` 和 `swift-protobuf`。您可以安装它们并重新生成 RPC 接口: ``` make protos ``` ## 构建内核 如果您想构建自己的内核,请参阅 [kernel 目录](./kernel/README.md)中的说明。 ## Pre-commit hook 运行 `make pre-commit` 以安装 pre-commit hook,以确保当您运行 `git commit` 时,您的更改具有正确的格式和许可证头。 ## 文档 生成 API 文档以供本地查看: ``` make docs make serve-docs ``` 通过在另一个终端中运行以下命令来预览文档: ``` open http://localhost:8000/containerization/documentation/ ``` ## 贡献 欢迎并鼓励对 Containerization 进行贡献。请参阅 [CONTRIBUTING.md](/CONTRIBUTING.md) 了解更多信息。 ## 项目状态 版本 0.1.0 是 Containerization 的首个正式版本。早期版本不保证源稳定性。 由于 Containerization 库正处于活跃开发阶段,仅保证次要版本(例如 0.1.1 和 0.1.2 之间)内的源稳定性。如果您不希望出现 potentially 源码破坏性的包更新,可以使用 .upToNextMinorVersion(from: "0.1.0") 来指定您的包依赖项。 未来的次要版本可能会根据需要更改这些规则。
标签:Apple Silicon, DevOps工具, ext4文件系统, GRPC, Hakrawler, Linux容器, macOS开发, Netlink, NIDS, OCI镜像, Rosetta 2, Swift, Virtualization框架, vminitd, Vsock, 内核优化, 安全渗透, 容器化, 容器运行时, 开源库, 微虚拟机, 快速启动, 搜索引擎爬虫, 系统编程, 虚拟化技术, 跨平台开发, 轻量级虚拟机