以下記事は2017年に記載したものであり、 2018年12月にリリースされたVirtualbox6.0からHyper-Vとの共存ができる模様。

参考: https://forest.watch.impress.co.jp/docs/news/1159338.html

以下は、アーカイブになります。

はじめに

きっかけは以下過去記事。

VirtualBoxとHyper-V(Docker for Windows)の共存ができない?

Docker for Windowsを使うためにはHyper-Vを有効化しないといけない。
Hyper-Vが有効だとVirtualboxが使えない。
DockerとVirtualboxを使うたびにHyper-VのOn/Off&PCの再起動は面倒なので
そもそもなんでムリなのか・どうするのが一番良さそうなのか調べてみた。

そもそもなぜ共存がムリなのか

DockerとVirtualBoxの共存がムリというか、Hyper-VとVirtualBoxの共存がムリみたい。

Docker for Windows(Hyper-V)について

Docker for WindowsはHyper-V(Microsoft提供の仮想化システム)の上で動く。
Hyper-VはCPUの機能であるIntel-VT機能(もしくはAMD-V)が必須。
Hyper-V自体はハイパーバイザ型仮想。
同じタイプの仲間にはESXiなどがある。
クライアントOSではWindows8以降に搭載されるようになった。

VirtualBoxについて

VirtualBox自体はホストOS型仮想。

仮想化支援機能を有効化するときにIntel-VT機能を使うらしい。
これにより64bitOSに対応したり、効率的な処理(通常VirtualBoxがソフトウェアで処理している資源要求などの割り込みをハードウェアで処理)できるらしい。

Intel-VT(VT-x)とは

インテルの仮想化支援技術。
x64世代のcpuからサポートされている。
通常は BIOS に入って「Virtualization Technology」などと記述されたメニューから、有効・無効の設定をする。
ほとんどのPCはデフォルト無効なので初めてVirtualBoxに64bitOSをインストールしようとしたときはBIOSから設定を有効にする。

上記をまとめると

  • Intel-VT機能がDockerとVirtualBoxで共存できないのが原因っぽい。
  • VirtualBoxはIntel-VTがあった方がパフォーマンスが良いが、なくても動かせる

→つまりVirtualboxの仮想化支援機能をOFFにすれば共存できる?

検証:Hyper-VとVirtualBoxの共存をためす

検証環境

ホストOS:Windows10 Pro
Hyper-V:有効
VirtualBox:5.1.22 (仮想化支援機能OFF)
ゲストOS:CentOS7(32bit)・・・仮想化支援機能がOFF前提のため32bitのみ動く

検証内容

Hyper-Vが有効な状態で、VirtualBoxにCentOS7をインストール

結果

失敗(ホストPCダウン)
本来であればVirtualboxの設定からアクセラレーションを選択することで仮想化支援機能をOFFにできるが、
Hyper-Vが有効になっているためかアクセラレーションのタブを選択することができなかった。
この状態でVirtualBoxのCentOSを起動するとホスト側のPCにエラーが発生し、ブルーバック→再起動になった。
※3回程試したがすべて再起動

Hyper-Vの設定を無効化したときは問題なくCentOSをVirtualBoxで起動できたので、Hyper-V周りが影響してうまく行かなかったと思われる。

結局どうすればよいのか

VirtualBoxにこだわりがない人は、素直にVirtualBox→Hyper-Vに引っ越ししたほうが良さそう。

そうすることでDocker for Windowsと仮想マシンを同時に使用できる & 仮想環境としてもHyper-Vの方がオーバヘッドが少なく高速で処理ができる。
またOracleのVirtualBoxよりMicrosoftのHyper-Vの方が高信頼らしい(使い勝手は別として)。

Docker ToolboxであればHyper-Vを有効にしなくても使えるが、
Docker for Windowsが後継製品なので上記メリット含めできればこちらを使いたいところ。