dockur/macos
主な特徴
- macOS 11(Big Sur)から15(Sequoia)までの幅広いバージョンサポート
- 自動的な公式macOSリカバリイメージのダウンロード
- WebベースのVNCアクセス(noVNC)による簡単な操作
- Docker ComposeおよびKubernetesでのデプロイメントサポート
- ユニークなハードウェアIDの自動生成(シリアル番号、UUID、MACアドレス)
- KVMハードウェアアクセラレーションによる高速化
- ファイル共有、USBパススルー、ディスクパススルーなどの高度な機能
- 設定可能なCPUコア数、RAM容量、ディスクサイズ
- OpenCore 1.0.4を使用した安定したブート環境
リポジトリ解析: dockur/macos
基本情報
- リポジトリ名: dockur/macos
- 主要言語: Shell
- スター数: 14,561
- フォーク数: 597
- 最終更新: 活発に更新中(2024年)
- ライセンス: MIT License
- トピックス: docker, macos, qemu, kvm, virtualization, hackintosh, osx-kvm, opencore
概要
一言で言うと
DockerコンテナでmacOSを実行できるようにするプロジェクトで、QEMU/KVMによる仮想化とWebベースのアクセスを提供します。
詳細説明
dockur/macosは、Linux上でDockerコンテナ内でmacOSを動作させることを可能にする革新的なプロジェクトです。QEMU/KVM仮想化技術とOpenCoreブートローダーを組み合わせることで、非Appleハードウェア上でmacOSを実行します。AppleのInternet Recoveryサービスから公式のmacOSリカバリイメージを自動的にダウンロードし、Web VNC経由でアクセス可能な完全なmacOS環境を提供します。教育・開発・テスト目的での使用を想定しています。
主な特徴
- macOS 11(Big Sur)から15(Sequoia)までの幅広いバージョンサポート
- 自動的な公式macOSリカバリイメージのダウンロード
- WebベースのVNCアクセス(noVNC)による簡単な操作
- Docker ComposeおよびKubernetesでのデプロイメントサポート
- ユニークなハードウェアIDの自動生成(シリアル番号、UUID、MACアドレス)
- KVMハードウェアアクセラレーションによる高速化
- ファイル共有、USBパススルー、ディスクパススルーなどの高度な機能
- 設定可能なCPUコア数、RAM容量、ディスクサイズ
- OpenCore 1.0.4を使用した安定したブート環境
使用方法
インストール
前提条件
- KVMサポート付きLinuxホスト(Intel VT-xまたはAMD SVM)
- Docker または Podman がインストール済み
/dev/kvmデバイスへのアクセス権限NET_ADMINcapability(ネットワーキング用)
インストール手順
# 方法1: Docker Compose(推奨)
# compose.ymlファイルを作成
cat << 'EOF' > compose.yml
services:
macos:
image: dockurr/macos
container_name: macos
environment:
VERSION: "13" # macOSバージョン(11-15)
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 5900:5900/tcp
- 5900:5900/udp
volumes:
- ./macos:/storage
restart: always
stop_grace_period: 2m
EOF
# 起動
docker compose up -d
# 方法2: Docker CLI
docker run -it --rm \
--name macos \
-p 8006:8006 \
--device=/dev/kvm \
--device=/dev/net/tun \
--cap-add NET_ADMIN \
-v "${PWD:-.}/macos:/storage" \
--stop-timeout 120 \
dockurr/macos
基本的な使い方
Hello World相当の例
# 最小限の起動(macOS 13 Ventura、デフォルト設定)
docker run -it --rm -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN dockurr/macos
# ブラウザで http://localhost:8006 にアクセス
# 画面の指示に従ってmacOSをインストール
実践的な使用例
# compose.yml - カスタマイズ設定での起動
services:
macos:
image: dockurr/macos
container_name: macos
environment:
VERSION: "14" # macOS Sonoma
RAM_SIZE: "8G" # 8GB RAM
CPU_CORES: "4" # 4 CPUコア
DISK_SIZE: "256G" # 256GB ディスク
DHCP: "Y" # DHCPパススルー有効
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 5900:5900/tcp
- 5900:5900/udp
volumes:
- ./macos:/storage
- ./shared:/shared # ホストとのファイル共有
restart: unless-stopped
高度な使い方
# USBデバイスのパススルー例
docker run -it --rm \
--name macos \
-p 8006:8006 \
--device=/dev/kvm \
--device=/dev/net/tun \
--device=/dev/bus/usb/001/002 \ # USBデバイス
--cap-add NET_ADMIN \
-e ARGUMENTS="-device usb-host,vendorid=0x1234,productid=0x5678" \
-v "${PWD}/macos:/storage" \
dockurr/macos
# 物理ディスクのパススルー例
docker run -it --rm \
--name macos \
-p 8006:8006 \
--device=/dev/kvm \
--device=/dev/net/tun \
--device=/dev/sdb \ # 物理ディスク
--cap-add NET_ADMIN \
-e DISK2_SIZE="/dev/sdb" \
-v "${PWD}/macos:/storage" \
dockurr/macos
ドキュメント・リソース
公式ドキュメント
- readme.md: プロジェクトの概要、インストール手順、設定オプション、FAQ
- license.md: MITライセンスの詳細
- Dockerfile: マルチステージビルドの定義と依存関係
サンプル・デモ
- compose.yml: Docker Compose設定の例
- kubernetes.yml: Kubernetes展開用のマニフェスト
チュートリアル・ガイド
- READMEに含まれる初期設定ガイド
- macOSインストール手順(Disk Utility使用方法含む)
- トラブルシューティングガイド(FAQ形式)
技術的詳細
アーキテクチャ
全体構造
dockur/macosは、QEMU/KVM仮想化層の上にOpenCoreブートローダーを組み合わせ、Dockerコンテナ内でmacOSを実行する多層アーキテクチャを採用しています。ベースイメージはqemux/qemu:7.12を使用し、OSX-KVMプロジェクトからUEFIファームウェア(OVMF)を、KVM-OpencoreプロジェクトからOpenCore ISOを取得しています。
ディレクトリ構成
dockur/macos/
├── src/ # コアスクリプト
│ ├── entry.sh # メインエントリーポイント
│ ├── install.sh # macOSダウンロード・セットアップ
│ └── boot.sh # ブートプロセス管理
├── assets/ # 設定ファイル
│ └── config.plist # OpenCore設定テンプレート
├── compose.yml # Docker Compose設定例
├── kubernetes.yml # Kubernetes設定
├── Dockerfile # コンテナビルド定義
├── readme.md # プロジェクトドキュメント
└── license.md # ライセンス情報
主要コンポーネント
-
entry.sh: Dockerエントリーポイント
- 場所:
src/entry.sh - 責務: 環境変数の処理、初期化、他のスクリプトの呼び出し
- 主要機能: ディスク作成、ネットワーク設定、QEMU起動
- 場所:
-
install.sh: macOSインストーラー管理
- 場所:
src/install.sh - 責務: macOSリカバリイメージのダウンロード、ハードウェアID生成
- インターフェース:
downloadImage(),generateSerial(),generateMAC()
- 場所:
-
boot.sh: ブートプロセス管理
- 場所:
src/boot.sh - 責務: OpenCore設定、UEFIブート、QEMU引数構築
- 主要機能: config.plist生成、ブートオプション設定
- 場所:
技術スタック
コア技術
- 仮想化: QEMU 7.12 + KVM(ハードウェアアクセラレーション)
- ブートローダー: OpenCore 1.0.4(Hackintosh用ブートローダー)
- ファームウェア: OVMF(UEFIファームウェア実装)
- 主要ツール:
- macserial: シリアル番号生成ユーティリティ
- noVNC: WebベースのVNCクライアント
- websockify: WebSocketからTCPへのプロキシ
開発・運用ツール
- ベースイメージ: qemux/qemu:7.12(QEMU仮想化環境)
- マルチステージビルド: 効率的なDockerイメージ構築
- 設定管理: 環境変数による動的設定
- ネットワーク: virtio-net(高速仮想ネットワーク)
設計パターン・手法
- Template Pattern: config.plist生成での動的値の置換
- Builder Pattern: QEMU起動引数の段階的構築
- Facade Pattern: 複雑な仮想化設定の簡略化されたインターフェース
- 環境変数駆動設定: 12-Factor App原則に従った設定管理
データフロー・処理フロー
-
初期化フェーズ
- コンテナ起動時にentry.shが実行される
- 環境変数の解析と検証
- ストレージディレクトリの準備
-
ダウンロードフェーズ
- macOSバージョンに応じたボードIDの選択
- AppleのInternet Recoveryからイメージダウンロード
- BaseSystemイメージの抽出と準備
-
設定生成フェーズ
- ユニークなハードウェアIDの生成(シリアル、UUID、MAC)
- OpenCore config.plistの動的生成
- QEMU起動引数の構築
-
ブートフェーズ
- OVMF UEFIファームウェアの起動
- OpenCoreブートローダーの実行
- macOSインストーラーまたはOSの起動
API・インターフェース
公開API
Web VNCインターフェース
- 目的: ブラウザからmacOSデスクトップへのアクセス
- URL: http://localhost:8006
- 使用例:
# コンテナ起動後、ブラウザでアクセス
open http://localhost:8006
VNC直接接続
- 目的: VNCクライアントからの直接接続
- ポート: 5900/tcp, 5900/udp
- 使用例:
# VNCクライアントで接続
vncviewer localhost:5900
設定・カスタマイズ
設定ファイル
# 環境変数による主要設定項目
VERSION="14" # macOSバージョン(11-15)
RAM_SIZE="8G" # RAM容量(例: 4G, 8G, 16G)
CPU_CORES="4" # CPUコア数(1-64)
DISK_SIZE="256G" # ディスクサイズ
DHCP="Y" # DHCPパススルー(Y/N)
DEVICE_MODEL="iMacPro1,1" # デバイスモデル
SERIAL="changeme" # カスタムシリアル番号
UUID="changeme" # カスタムUUID
MAC_ADDRESS="changeme" # カスタムMACアドレス
拡張・プラグイン開発
カスタムQEMU引数の追加:
# ARGUMENTS環境変数で追加のQEMU引数を指定
ARGUMENTS="-device usb-tablet -device usb-kbd"
パフォーマンス・スケーラビリティ
パフォーマンス特性
- KVMハードウェアアクセラレーションによる準ネイティブ性能
- virtio-netによる高速ネットワーク通信
- 9pファイルシステムによる効率的なファイル共有
- noVNCによる低遅延のリモートアクセス
スケーラビリティ
- 最大64 CPUコアまでの割り当て可能
- RAM容量はホストシステムの制限内で自由に設定
- 複数インスタンスの同時実行(ポート番号の調整必要)
- Kubernetesでのオーケストレーション対応
制限事項
- Appleハードウェアでの使用が法的に必要(Apple EULA)
- Windows 10、macOSホスト、多くのクラウドVPSでは動作不可
- macOS 15(Sequoia)ではApple IDサインインが未サポート
- グラフィックスアクセラレーションは限定的
評価・所感
技術的評価
強み
- 簡単なDockerコマンドでmacOS環境を構築可能
- 公式macOSイメージの自動ダウンロードによる信頼性
- Webベースのアクセスによる利便性
- 豊富な設定オプションと柔軟なカスタマイズ性
- 活発な開発とコミュニティサポート(14,000+スター)
改善の余地
- グラフィックスアクセラレーションの制限
- Apple IDサインインの制限(最新版)
- ホストOS・ハードウェアの制約
向いている用途
- macOSアプリケーションの開発・テスト
- CI/CDパイプラインでのmacOSビルド環境
- クロスプラットフォーム開発での互換性テスト
- 教育・学習目的でのmacOS環境体験
向いていない用途
- 商用利用(Apple EULAの制限)
- グラフィックス集約的なアプリケーション
- 実機レベルのパフォーマンスが必要な用途
- Apple IDに依存するサービスの利用
総評
dockur/macosは、技術的に洗練されたmacOS仮想化ソリューションを提供する画期的なプロジェクトです。Dockerの利便性とQEMU/KVMの強力な仮想化機能を組み合わせることで、開発者やテスターにとって貴重なツールとなっています。法的制約には注意が必要ですが、適切な用途で使用すれば、macOS開発環境の構築と管理を大幅に簡素化できる優れたソリューションです。