今夜がλ

夜だけプログラマー

Hyper-Vについて(2019)

Hyper-Vに関する知識が必要になったので調べてみた。

f:id:Tormits:20190925171659p:plain

Hyper-Vとは

WIndowsの一部OSに搭載されている仮想化機能。

2008年に正式発表された機能だが、当時Microsoftが仮想Windowsマシンのみをサポートしていたため、Hyper-Vを利用した仮想Linuxマシンについては制限が生じることが多かった。(機能低下・時刻同期・コンソール間のコピーペーストなど)
そういった背景からHyper-Vで仮想Linuxマシンを構築することをよしとしない意見もあった。

しかし2019年現在、仮想LinuxマシンもMicrosoftによってサポートが強化されて当時よりも使いやすくなり、ネガティブな意見は少なくなっている。 Hyper-VではLinuxのコンテナ技術を最大限利用できないという問題があるらしいが、これについてはHyper-V上でDockerを介することで対応する。

Hyper-VでLinuxを稼働させることの利点と制限 [ 5nine ] | VMware/Hyper-V(仮想化)クラウド対応ツール 技術ブログ

  1. Microsoftのサポートは、Linuxのコンテナ技術を最大限に有効利用できるレベルに達していない
    ...
    Hyper-VLinuxコンテナを活用するには、Dockerを使わなければなりません。

ちなみに、WSL2の仮想環境はこのHyper-Vで構築されている。 また、VMwareVIrtualBoxで利用している機能はHyper-Vと排他的な関係にあるため、WSL2上でそれらのソフトウェアを実行することは不可能となった。

コンテナとは

そもそもコンテナ技術とは何か。自分自身、Dockerを使い出して初めて「コンテナ」という用語を知った。

VMが「ハードウェアレベルの仮想マシン」だとすると、コンテナは「OSレベルのアプリケーション実行環境」であり、それぞれの環境に割かれるリソースや隔離レベルが異なっているため、それぞれにメリットとデメリットがある。 例えば、従来のホスト型VMではホストOSの上にゲストOS(仮想マシン)ごと構築していたため、オーバーヘッドが大きく多くのリソースが割かれてしまうという問題があるし、コンテナの実行環境についてはホストOSに依存しており、古いOS上で動かしているコンテナで新しいOSの機能を実行することはできない。

コンテナ技術についてはこちらの資料が参考になる。 employment.en-japan.com

www.slideshare.net

ホスト型VMとハイパーバイザー型VMの違い

上記コンテナの説明の中ではホスト型VMの『オーバーヘッドが大きい』という記述を入れたが、VM仮想化ではこの問題を解決するための「ハイパーバイザー型」という仮想化技術を利用したものもある。 「ハイパーバイザー」と呼ばれるソフトウェアをホストOS上で起動し、その上で複数のゲストOS(仮想マシン)を運用することが可能となる。

ただし、軽量化についてはホスト型VMと比べて、という話であり、コンテナよりは遅い。 qiita.com

WSLとDockerの共存は可能か?

WSL1時代はいくつか問題が出ていたようだが、WSL2ではDocker活用を前提とした作りになっているようで、Docker側もWSL2に最適化したプラットフォーム対応を行なっている。

www.reddit.com forest.watch.impress.co.jp www.publickey1.jp

Docker for Macの動作を軽くするためにMacのスペックを上げるというのはなんとも落語感がある話なので、Windowでの開発もありかなと思い始めている。

WSL2がダメならダメでLinuxマシンを使うのも一つの手。

参考記事:
Hyper-V - Wikipedia
Hyper-VでLinuxを稼働させることの利点と制限 [ 5nine ] | VMware/Hyper-V(仮想化)クラウド対応ツール 技術ブログ
ホスト型とハイパーバイザー型の違いは何?VMware vSphere Hypervisor の概要 | Think IT(シンクイット)
ハイパーバイザ - Wikipedia