【Hyper-V 有効】Docker DesktopとVirtualBoxを共存させる

# Hyper-Vを有効とした状態でVirtualBox上のVMを起動したい

VirtualBoxはHyper-Vとは異なる仮想化技術によって実現されており、Hyper-Vが有効化された状態では仮想マシンを起動できません。
一方、Docker Desktopを利用する際はHyper-Vを有効にしていないと起動できません。
どうしたものかと思っていたのですが、VirtualBox 6.1.16あたりからHyper-Vが有効になっている状態でも起動できるという記事を見かけたので実際に試してみました。

## 1. 大まかな手順
ネット上の記事をみると、Hyper-Vの有効/無効の切り替えは様々な手順があり、うまくいく方法と行かない方法がありました。
なので、ここで説明する手順は私の環境で成功した方法となります。あくまで一例としてご参考ください。

* 最新版のVirtualBoxをインストール(/アップデート)する。
* Hyper-Vの有効化には2種類を紹介
    * ①：powershellからコマンドで有効化
    * ②：フリーウェアの「Hyper-V Switch」を利用する
* VirtualBoxとDockerDesktopの両方が動くか確認する。

## 2. 動作環境

* Windows OS： Windows 10 Pro
* CPU： Intel Core i7
* VirtualBox： 6.1.18 r142142 (Qt5.6.2)
* Docker Desktop： Docker Engine v20.10.2

## 3. VirtualBoxのインストール

公式サイトからVirtualBoxをインストール、またはアップデートします。(https://www.virtualbox.org/wiki/Downloads)
2021年1月31日時点での最新版は**6.1.18**でした。今回はWindows用のVirtualBoxをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/e5c7e9b7-49e3-e194-f769-3e233dded1ed.png)

ちなみに、VirualBoxの変更ログをみると、6.1.14、6.1.16あたりからHyper-V対応を実装さたみたいですね。
→https://www.virtualbox.org/wiki/Changelog

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/832ecdda-9380-52f2-a600-1f8545f6cd3e.png)

今回はHyper-Vとの共存の話ですので、VirtualBoxのインストール方法は割愛します。

## 4. Hyper-Vを有効化する

### 方法①　コマンド上から有効にする方法

#### 現在の状態を確認

* powershellを「管理者として実行」で起動する
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/458d2502-2e89-a76f-1a5d-644245cccf6c.png)
* 以下のコマンドを実行し、"hypervisorlaunchtype"を確認する。"off"の場合はHyper-Vが無効になっている状態。
    * > bcdedit
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/916a1238-9da1-2852-65a8-c5be2864e951.png)

ちなみに、この状態では、VirtualBoxは起動できてもDocker Desktopの起動に失敗します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/f0162321-5fda-ce15-74ce-46edc194c8f3.png)

※ hypervisiorlaunchtypeがoffになっており(左下)、VirtualBoxのVMは起動するものの(右下)、Docker Desktopはエラーとなり起動しない(左上)。

#### Hyper-Vの有効化

* 先程のPowershell上で以下のコマンドを実行し、"hypervisorlaunchtype"を確認する。"Auto"の場合は有効になっている状態。
    * > bcdedit /set hypervisorlaunchtype auto
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/b209ed54-d65e-8425-c706-261d03e543db.png)
* 一度windowsを再起動します。
* 再起動後、VirtualBoxとDocke Desktopの両方を実行します。両方が起動すれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/928f52e4-a287-b29b-60fb-1db581acc7d5.png)

### 方法②　フリーウェアの「Hyper-V Switch」を利用する方法

色々と調べているうちに、GUIでHyper-Vを有効/無効の切り替えができるアプリを見つけたので、こちらも紹介します。
参考ページ：https://github.com/nuitsjp/HyperV-Switch/blob/master/README-jp.md

#### Hyper-V Switchの入手

* 以下のURLから最新版をダウンロードします。
    * https://github.com/nuitsjp/HyperV-Switch/releases
* 2021年1月31日時点の最新版v1.0.2では、2種類の提供形態がありました。
    * mis形式のインストーラ
    * インストール不要なZIPに格納した実行ファイル
* 今回はmis版をダウンロードしました。
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/bcaa6daf-f431-5ca5-3b12-b8bd0afd6bca.png)

#### Hyper-Vの有効化

* Hyper-V Switchを起動し、今の状態を確認します。
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/87c672d2-d6a4-3d00-ad4f-bebfe9e2553c.png)
* offになっている場合、トグルスイッチをONにしてから「OK」ボタンを押します。
    * その後、再起動を促されるので素直に再起動します。
* 再起動後、VirtualBoxとDocke Desktopの両方を実行します。両方が起動すれば成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/fc4a16f9-f461-b17c-9af2-858f1679ed78.png)

## 5. (おまけ)Hyper-Vを無効にする

仮想マシンの動作が、yper-Vを有効化した状態だとなんだかもっさりしている気がしました。
メインでVirtualBoxを利用されているのであれば、普段は無効にしておくのも良いかもしれません。

* hyper-Vを無効とするには、管理者として実行したpowetshellで以下のコマンドを実行します。
    * > bcdedit /set hypervisorlaunchtype off
* あるいは、「Hyper-V Switch」のトグルスイッチをoffします。
* 一度再起動します。
* 再起動後、bcdeditコマンドで"hypervisorlaunchtype"の項目が"off"に戻っていればHyper-Vは無効化されています。
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/d2a16fa4-7435-5cbe-2e4d-93ca38117fc3.png)

## 6. (補足)うまく行かなかった場合

念の為、私のPCでの設定を添付しておきます。今回の方法において、この設定の有無は関係なさそうでしたが、もし上記でうまく行かなかった場合は比較してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462467/c0fad9d8-c2da-5519-6a0d-ebe87377b205.png)

※この設定の開き方はこちらを参照→[[設定] で Hyper-V ロールを有効にする](https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)