Hyper-V上のWindowsでVirtualBoxやDocker等の仮想機能を使用したいケースがあると思います。
デフォルト状態では動かないため、仮想機能上で仮想機能を動かすnested virtualizationについて記載します。
Hyper-Vが実行出来ることはもとより、プロセッサに応じて以下のような前提条件があります。
Intel プロセッサ (VT-x/EPT テクノロジ搭載)
・Hyper-V ホストは、Windows Server 2016 または Windows 10 以降である必要があります。
・VM 構成バージョン 8.0 以降AMD EPYC/Ryzen プロセッサ以降
入れ子になった仮想化 | Microsoft Docs
・Hyper-V ホストは、Windows Server 2022 または Windows 11 以降である必要があります。
・VM 構成バージョンが 10.0 以降
Hyper-V上のゲストOSでDockerやVirtualBoxを起動した時のエラーを確認しました。
Docker failed to initialize
Docker Desktop is shutting down.
System.InvalidOperationException:
Failed to deploy distro docker-desktop to C:\Users\testuser\AppData\Local\Docker\wsl\distro: exit code: -1
stdout: Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください
WHvCapabilityCodeHypervisorPresent is FALSE! Make sure you have enabled the 'Windows Hypervisor Platform' feature. (VERR_NEM_NOT_AVAILABLE).
AMD-V is not available (VERR_SVM_NO_SVM).
終了コード :
E_FAIL (0x80004005)
コンポーネント:
ConsoleWrap
インターフェース:
IConsole {872da645-4a9b-1727-bee2-5585105b9eed}
nested virtualizationが使えるように設定を変更します。
まずはホスト側OSにて、PowerShellを管理者権限で開きます。
Windowアイコンで「PowerShell」と入力すると「Windows PowerShell」のアプリが表示されますので、右クリックから[管理者として実行]を押下して起動します。
起動したPowerShellで以下のコマンドを実行し、機能を有効にします。
「<VMName>」はHyper-Vで作成しているVM名になります。VM名にスペースが含まれる場合は”(ダブルクォート)で囲ってください。
Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
オフにする場合は$trueを$falseにしてコマンドを実行します。
Docker Desktopでサンプルのイメージを動かしました。
左がDocker Desktop画面で右がブラウザからサンプルイメージにアクセスしてます。
次にVirtualBoxです。
Ubuntu Desktopを起動しています。
左がVirtualBoxの画面で右がUbuntu Desktopの画面です。
Hyper-Vに構築したWindows11でDocker、VirtualBoxが起動することが確認できました。
最後に所感ですが、仮想上で仮想を使用する場合、ホストOSに求められるスペック(CPU、メモリ等)が必然的に高くなるのと、前提条件を見るからに古い環境だと厳しいのかなと感じました。