View in English

  • 打开菜单 关闭菜单
  • Apple Developer
搜索
关闭搜索
  • Apple Developer
  • 新闻
  • 探索
  • 设计
  • 开发
  • 分发
  • 支持
  • 账户
在“”范围内搜索。

快捷链接

5 快捷链接

视频

打开菜单 关闭菜单
  • 专题
  • 相关主题
  • 所有视频
  • 关于

返回 WWDC25

  • 简介
  • 概要
  • 转写文稿
  • 代码
  • 了解 Containerization

    认识一下 Containerization,它是一个用 Swift 编写的开源项目,用于在 Mac 上创建和运行 Linux 容器。了解 Containerization 如何安全私密地对 Linux 容器进行管理。探索开源 Container CLI 工具如何利用 Containerization 软件包提供简单而强大的功能,以在 Mac 上构建、运行和部署 Linux 容器。

    章节

    • 0:00 - 简介
    • 0:48 - 容器的定义
    • 3:50 - Containerization 深度探索:图像管理
    • 5:53 - Containerization 深度探索:虚拟化
    • 6:53 - Containerization 深度探索:容器环境
    • 9:19 - 命令行工具
    • 11:45 - 总结

    资源

    • Container
    • Containerization
      • 高清视频
      • 标清视频
  • 搜索此视频…

    大家好 我叫 Michael 今天 很高兴为大家 介绍一款全新的开源框架 Containerization 是一个 Swift 框架 可用于构建具有原生体验的 容器化应用程序 我们将深入了解 Containerization 对安全性、隐私性和性能的关注 如何影响 Linux 容器的设计与实施 在正式介绍 Containerization 框架之前 我们会先花一些时间 了解容器的相关知识 接着 我们将了解 Containerization 提供的 API 最后 我们将介绍一个命令行工具 可用于构建、运行和管理容器 现在 让我们来了解一下什么是容器 以及它们适用的一些常见用例 Linux 容器已成为 构建、测试和部署 服务器端应用程序的标准方式 在大规模部署服务器端工作负载时 这些工作负载需要 在各种不同的环境中运行 容器不仅能够 将工作负载与主机隔离开来 还能实现不同工作负载之间的 相互隔离 容器还支持 在本地机器上复现部署环境 这让我们能够 在本地开发和测试应用程序 就像在生产环境中运行一样 容器通过允许开发者将应用程序 及它的依赖项 打包在一起来实现这一点 依赖项可以包括二进制文件、 动态库以及资源文件 将应用程序及它的依赖项打包在一起 容器能够使用与主机系统 或其他容器不同版本的依赖项 最终 这些内容会被打包成一个 可部署的单元 也就是容器 容器还提供了 额外的运行时隔离机制 容器通常拥有 与主机系统隔离的网络栈 为了保护隐私 运行在某个容器中的进程 无法查看或检查 主机或其他容器中运行的进程 此外 容器之间可以独立 进行规模调整和弹性扩展 比如 CPU、内存和磁盘等资源 可以根据工作负载的需求 进行分配

    为了在 macOS 上 运行 Linux 容器 我们需要虚拟化 Linux 环境 传统的解决方案是启动一个大型 虚拟机 用于承载 所有正在运行的容器 资源会被分配给这台虚拟机 随着容器的增加 这些资源会根据需要 在容器之间进行划分 当你需要从 Mac 共享 额外的目录和文件时 这些内容会先共享给虚拟机 然后再提供给请求数据的特定容器 在探索如何将 Linux 容器 引入 macOS 的过程中 我们设定了几个希望达成的目标 在安全性方面 我们的目标 是为每个容器 提供与当前大型虚拟机 相同等级的隔离保障 我们还希望尽量减少这些虚拟机中 对关键实用程序和动态库的依赖 这样可以减少攻击面并降低 更新维护的成本 在隐私方面 应以每个容器为单位 对目录访问权限进行限制 只有请求访问这个目录的容器 才能访问其中的内容 同时 我们希望在 尊重用户资源的前提下 提供高性能的使用体验

    在构建 Containerization 框架时 我们始终以这些设计目标为指导 Containerization 是一个开源的 Swift 框架 它提供了用于 镜像管理、容器执行的 API 以及一个在 Swift 中构建的 强大初始化系统 接下来 我们来了解一些 用于创建容器的 API 首先 我们来看看 Containerization 如何处理镜像管理

    大多数容器都是基于镜像创建的 镜像是一种分发载体 其中包含文件系统内容 以及默认配置 镜像在创建新容器时 充当模板的角色

    Containerization 提供了 用于获取镜像文件系统内容 和配置的 API 这项操作包括向镜像仓库发出请求 (镜像仓库是一种负责 镜像存储与分发的服务) 然后将响应内容 写入本地文件系统以供使用

    一旦镜像被拉取到本地 镜像的配置信息即可 作为创建新容器的起点 镜像配置中可以包含 默认要执行的进程 运行进程的工作目录 以及运行进程所使用的 用户身份等信息 镜像的文件系统内容 包含应用程序所需的文件和目录 为了高效访问镜像内容 我们将文件系统 以块设备的形式公开出来 块设备的实现方式是 创建一个大型文件 并用文件系统对它进行格式化 为了让我们的 Linux 容器 能够使用这个块设备 必须使用 Linux 能够识别的 文件系统对它进行格式化 EXT4 是一种广泛使用的 Linux 文件系统 而 Containerization 提供了一个 Swift 包 支持直接在 Swift 中格式化 EXT4 文件系统、 创建目录结构并填充内容 根据镜像创建容器后 必须启动一个 Linux 虚拟机 来运行这个容器 出于安全考虑 我们的目标是 为每一个启动的容器 提供与大型虚拟机 相同级别的隔离保障 Containerization 通过为每个容器运行一个独立的 轻量级虚拟机来实现这一点 同时仍能保持亚秒级的启动速度 这也带来了一个好处: 每个容器都拥有 自己的专属 IP 地址 专属 IP 地址 可为每个容器提供高效的网络访问 并且当你要访问容器提供的服务时 无需映射单个端口 在共享目录和文件时 只有请求这个目录的容器 才能访问其中的内容 对于 CPU 和内存等资源 如果没有容器在运行 则不会分配任何资源 容器启动后 后续操作 都会在虚拟机内部完成 接下来 我们来看一下 Containerization 在启动容器前 是如何设置运行时环境的 虚拟机启动后 会生成一个初始进程 这个进程所使用的二进制文件 由 Containerization 中的 精简文件系统提供 这个文件系统中包含一个名为 vminitd 的二进制文件 vminitd 是一个在 Swift 中构建的 初始化系统 在虚拟机内 作为第一个进程运行

    作为初始进程运行时 需要在容器执行前后 承担多项职责 vminitd 负责 为网络接口分配 IP 地址 并挂载文件系统 例如通过块设备 公开的镜像内容 它还负责启动并监管 虚拟机内运行的所有进程 vminitd 提供一套 API 使主机能够 创建并管理虚拟机内的进程 过去 在使用大型虚拟机时 通常会以完整系统的形式 进行引导启动 这些大型虚拟机的文件系统 通常包含诸如 libc 实现、 动态库以及 cd、 cp 和 ls 等核心实用程序 出于安全考虑 我们希望尽可能 减少容器的攻击面 Containerization 提供的文件系统 不包含任何核心实用程序 其中不包含任何动态库 也不包含 libc 实现 为了使 vminitd 能在这个 没有可用链接库的 受限环境中运行 我们需要将 vminitd 编译为静态可执行文件 为此 我们使用 Swift 静态 Linux SDK 它支持我们直接在 Mac 上 交叉编译静态 Linux 二进制文件 我们还可使用 musl 这是一种 能够为静态链接 提供出色支持的 libc 实现 借助这一方案 我们 可以在 Mac 上交叉编译出 静态 Linux 可执行文件 vminitd 使它能够在这个隔离环境中运行 Containerization 会整合所有这些 核心组件 提供功能强大的 API 支持构建基于 Linux 容器的 解决方案 接下来 我们来看一款命令行工具 它为运行容器 提供了一种简单且可靠的方式 这个容器工具由 CLI 和基于 Containerization API 构建的 XPC 服务组成 这些服务负责支持 存储、镜像管理以及网络服务 其中网络服务用于 为容器分配 IP 地址 并处理 DNS 请求 最后 这些服务还负责容器的 管理与运行 我们先打开终端 使用容器工具将镜像拉取到本地 现在我们已经进入终端 可先输入 container image pull

    接着 输入一个镜像名称 在本演示中 我们将使用 alpine:latest 当我们运行这个命令时 容器会先将镜像的内容 和配置拉取到本地 然后为我们创建可供使用的块文件 很好

    现在镜像已成功拉取到本地 让我们根据这个镜像运行容器

    这个工具会根据镜像的 文件系统内容和配置 创建一个容器 随后 它将通过 Containerization API 启动一个轻量级虚拟机 以运行这个容器 让我们回到终端 实际演示一下这一过程 我们可以通过输入 container run 来启动运行命令 并指定以交互式 shell 的方式运行 因此 我们将使用 -t 添加终端设备 并通过 -i 标志启用交互式输入 最后 输入镜像名称 以及要执行的命令 这里我们将运行 sh 即 shell 在短短几百毫秒内 我们就进入了 一个交互式 shell 环境 接下来 我们可以检查 容器的运行时环境 运行 uname -a 命令后 可以看到 我们现在正处于 Linux 环境中 由于容器提供了良好的隔离性 当我们运行 ps aux 等命令时 只会看到我们的 shell 和 ps 进程 主机上的其他进程 或其他容器中的进程在这里不可见 以上就是容器命令行工具的介绍 你可以通过 GitHub 进一步了解 借助 Containerization API 可以为容器 提供安全、私密且高效的运行体验 欢迎加入我们 将 Containerization 核心功能引入 macOS 如果你有兴趣构建 集成 Linux 容器的项目 欢迎前往 GitHub 查看 Containerization 框架 查看源代码 了解轻量级 虚拟机的启动方式 探索为 vminitd 构建的 所有跨平台 Swift 软件包 并查看相关示例项目 如果你想开始运行容器 欢迎试用容器工具 并在 GitHub 上参与讨论 你可以查看源代码、提交问题 也可以创建拉取请求 我们期待看到你的新作

    • 9:58 - Container Image Pull

      container image pull alpine:latest
    • 10:43 - Container Run

      container run -t -i alpine:latest sh
    • 0:00 - 简介
    • 借助名为“Containerization”的全新开源 Swift 框架,开发者能够构建安全、私密、高性能且具有原生体验的容器化 Linux 应用程序。这一框架包含用于创建、管理和执行容器的 API 及命令行工具。

    • 0:48 - 容器的定义
    • Linux 容器通过隔离工作负载和依赖项,彻底改变了服务器端应用程序的部署方式,使开发者能够根据特定需求打包应用程序。这种打包方式能够在本地和生产环境中提供一致的环境,从而简化开发和测试过程。 容器提供运行时隔离,而要在 macOS 上运行 Linux 容器,虚拟化是必不可少的。 Containerization 的目标是实现强大的安全隔离,降低虚拟机开销,通过每个容器的目录访问控制增强隐私性,并提供尊重用户资源的高性能体验。

    • 3:50 - Containerization 深度探索:图像管理
    • Containerization 提供了用于管理镜像和执行容器的 API,以及强大的 Swift 初始化系统。 Containerization 的工作原理是从注册表中提取镜像。这个镜像将作为模板,包含文件系统内容和新容器的默认配置。 镜像的配置可以指定要执行的默认进程、工作目录和用户身份。为了实现高性能访问,Containerization 将镜像的文件系统公开为块设备,使用 EXT4 (一种广泛使用的 Linux 文件系统) 将块设备进行格式化。

    • 5:53 - Containerization 深度探索:虚拟化
    • 为了直接从 Swift 填充 EXT4 文件系统,系统会启动一个 Linux VM 来运行容器。这一容器将通过 Containerization 提供轻量级 VM 级隔离、亚秒级启动时间、针对每个容器的专用 IP,以及安全的文件和目录共享。

    • 6:53 - Containerization 深度探索:容器环境
    • 在 Containerization 所利用的虚拟机中,只有在容器运行时才会动态分配 CPU 和内存等资源。在这个虚拟机中,最小文件系统包含“vminitd”二进制文件,这是一个用 Swift 构建的初始化系统。“vminitd”作为第一个进程运行,负责管理网络接口、装载文件系统以及启动和监控所有后续进程。 为了增强安全性,文件系统剥离了核心实用程序、动态库和“libc”。为此,要使用 Swift 的静态 Linux SDK 将“vminitd”编译为静态可执行文件。

    • 9:19 - 命令行工具
    • Containerization 提供了一个强大的 API,用于围绕 Linux 容器构建解决方案。命令行工具“container”将利用这些 API 来管理存储、镜像和网络并运行容器。 用户可以使用“container image pull”命令在本地拉取镜像,然后使用“container run -t -i ”命令以交互方式运行容器。这种方法会创建一个轻量级的虚拟机,从而提供隔离,正如仅显示容器进程的“ps aux”命令所示。这一工具可在 GitHub 上获取。

    • 11:45 - 总结
    • macOS 现已支持 Containerization API,可实现安全、私密且高性能的 Linux 容器。你可以访问 GitHub 上的 Containerization 框架、浏览源代码并查看示例项目。容器工具可直接使用,欢迎大家通过 GitHub 提供反馈。

Developer Footer

  • 视频
  • WWDC25
  • 了解 Containerization
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载 (英文)
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    获取 Apple Developer App。
    版权所有 © 2025 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则