菜单

概述

相关源文件

本文档提供了Docker-OSX的技术概述,这是一个在Linux和Windows(通过WSL2)主机上运行macOS的系统。它解释了Docker-OSX系统的架构、组件和操作流程。

有关安装和使用说明,请参阅安装和基本用法。有关特定镜像变体的详细信息,请参阅镜像变体

目的与主要功能

Docker-OSX允许用户出于各种目的在容器化环境中运行macOS

  • 对macOS和Apple服务的安全研究
  • 无需Apple硬件即可进行macOS/iOS应用程序开发
  • CI/CD管道中的自动化测试
  • 在非Apple平台上运行macOS特定工具

该系统通过KVM硬件加速、X11转发GUI应用程序以及对iPhone USB连接的支持,提供了接近原生的性能。

来源: README.md1-5 README.md483-492

系统架构

Docker-OSX集成了多种技术,在Docker容器内创建了一个可运行的macOS环境

系统架构包括:

  1. 主机系统要求:具有KVM支持的Linux内核、Docker引擎和X11显示服务器
  2. Docker容器:基于Arch Linux的环境,包含QEMU和虚拟化工具
  3. QEMU/KVM:硬件加速虚拟化,用于运行macOS
  4. OpenCore引导加载程序:支持macOS在非Apple硬件上运行的专用引导加载程序
  5. macOS系统磁盘:作为虚拟机运行的实际macOS操作系统

来源: README.md6-40 README.md426-458

Docker-OSX镜像变体

Docker-OSX提供了多种镜像变体以支持不同的用例

镜像标签描述主要功能典型用例
最新版带有macOS安装程序的base镜像支持各种macOS版本开发、研究
naked需要用户提供的磁盘映像可定制安装自定义配置
自动版 (auto)预装macOS并实现自动化自动登录CI/CD、自动化测试
vnc启用VNC以进行远程访问远程图形界面无头服务器
特定版本特定的macOS版本针对特定版本优化依赖于版本的作业

来源: README.md57-204 README.md431-482

启动和初始化过程

当Docker-OSX容器启动时,它会执行一系列步骤来初始化和启动macOS

此过程强调了容器初始化期间可用的自定义选项,特别是关于系统身份(序列号),这对于iMessage和其他Apple服务研究至关重要。

来源: README.md589-696 README.md211-259

配置与自定义

Docker-OSX可以通过环境变量、卷挂载和自定义磁盘映像进行广泛的自定义

关键环境变量

可变目的示例默认
内存内存分配RAM=83GB
CPUCPU型号CPU=Haswell-noTSX主机
CPUS/SMPCPU核心数CPUS=44
DISPLAYX11显示DISPLAY=:0.0主机的$DISPLAY
GENERATE_UNIQUE生成唯一序列号GENERATE_UNIQUE=true未设置
SHORTNAMEmacOS 版本SHORTNAME=montereycatalina

来源: README.md737-784 README.md60-156

部署选项

Docker-OSX可以通过不同方法在各种环境中部署

该系统支持三种主要的部署方法

  1. Docker CLI:用于单个实例的直接docker run命令
  2. Docker Compose:用于可重现环境的基于YAML的配置
  3. Kubernetes/Helm:用于集群环境中的编排部署

来源: README.md514-522 README.md574-785

主要功能

Docker-OSX提供了几个重要功能

  • iPhone/iOS集成:通过VFIO进行USB直通或通过usbfluxd进行基于网络的连接
  • X11转发:直接GUI访问macOS应用程序
  • VNC支持:对macOS环境的远程图形访问
  • SSH访问:远程命令行访问(默认端口10022)
  • 持久化存储:用于重用和持久化macOS安装的选项
  • iMessage/iCloud:通过序列号生成实现安全研究目的的功能
  • 多版本支持:从High Sierra到最新的macOS版本

来源: README.md483-495 README.md274-366

技术限制与注意事项

  • 没有原生GPU加速(使用软件渲染)
  • 需要主机系统支持KVM
  • 建议内存使用量最低3GB
  • 磁盘空间要求20GB+(Xcode建议50GB+)
  • macOS许可的法律考量(请参阅FAQ.md)

有关常见问题排查,请参阅排查

来源: README.md496-502 README.md559-562 FAQ.md1-175