すとらと!

調べたことを書いていきます。

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

f:id:cyamax:20170506222415p:plain

はじめに

きっかけは以下過去記事。
cyamax.hateblo.jp

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

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

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

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

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

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

VirtualBoxについて

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

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

Intel-V(VT-x)とは

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

上記をまとめると

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

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

検証:Hyper-VVirtualBoxの共存をためす

検証環境

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

検証内容

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

結果

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

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

結局どうすればよいのか

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

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

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