TechReport

技術者情報

ソリューション

2017年8月30日(水)公開

第210回

Hyper-Vで作るコンテナ 新しい仮想マシンの使い方-Vol.2

Hyper-Vを利用してコンテナ技術を実現

前回、コンテナ技術によってもたらされるメリットをお伝えしました。
今回は、使い慣れたHyper-Vを利用してコンテナ技術を実現するために何が必要なのかを考えてみたいと思います。

記事INDEX

実現に必要な要件と実現可能性

そもそもの話とはなりますが、Hyper-Vの仮想マシンはWindows Server 2016になり、さらに使いやすく、非常に安定した仮想化プラットフォームとして十分にその役割を果たしています。その上で展開される仮想マシンは、Microsoft Azureでも提供されているように、様々なOS、テンプレートが提供され、ユーザーの利用シーンによって使い分けが可能です。これ以上、Hyper-Vや仮想マシンに何を望みますか? 何が足りないですか? といった場合、現状のHyper-Vで構築・展開されているシステムに置き換えて新たにシステムを構築、導入する理由付けはごくごく少ないのではないのでしょうか。それだけ、Hyper-Vを利用する上での満足度は非常に高いと感じています。

ただ、コンテナ技術によるメリットも十分導入するに値するもとのも認識しています。特に、インフラエンニアとしての見方からすると、プロジェクトごとに必ず発生するサーバーシステムの評価、検証段階でのメリットが大きいものと感じでいます。何度も繰り返される仮想マシンの作成、削除、変更、コピーの工程において、コンテナ技術の特徴が生かされるものと期待しています。

Hyper-Vのヘビーユーザーとして、Hyper-Vとコンテナ技術の共存こそが目指すべきゴールと考え、まずは、以下に要件(要望)となる項目をいくつか挙げておきましょう。また、現時点で実現可能かどうか、可否もマークしておきます。

可否要件(要望)
Hyper-V上の仮想マシンの新しい使い方として提起できる
仮想マシンと同様に分かりやすく扱える
小さい
起動、停止、再起動が速い
作る、破棄、作り直しが簡単にできること
Windowsだけではなく、他のOSも同様に利用できる
リモートデスクトップで接続ができる
PowerShellで操作できる
GUIで操作できる
Dockerコマンドで操作できる
×Dockerコンテナ、Windowsコンテナと互換性がある
コンテナから通常の仮想マシンとして再利用できる
レポジトリでコンテナイメージを共有できる
-etc.

あげればキリがありませんが、とりあえずこのようなところでしょうか。
これらを実現するために、何が必要なのかを1つずつ検証していきたいと思います。

〇→Hyper-V上の仮想マシンの新しい使い方として提起できる

自身も含めHyper-Vの仮想マシンを使い慣れたユーザーにとって、大きな仕様変更、制約、追加コストなどは無いに越したことはありません。現状のシステム、使い勝手を継承しつつ、より便利に、より早く、より小さくなどメリットだけが出てくるようなものでなければ、これだけ完成されたHyper-Vに対して何かを変えようとは思いません。そのための仕様づくりを第一に考える必要がります。

〇→仮想マシンと同様に分かりやすく扱える

Hyper-Vを利用する上では、仮想マシンと同様というよりは、仮想マシンそのものを利用してコンテナ技術を実現することを考えるのが一番の近道です。Hyper-Vには仮想マシンを構成する様々な技術、機能が備わっています。これらをうまく組み合わせることで、コンテナ技術を実現すべきと考えます。Hyper-Vマネージャーをはじめとして、使いやすいツールはもちろん、コンテナを構成する要素もメモリ、CPU、ハードディスク、ネットワークなど仮想マシンそのものを流用してコンテナを作成します。

〇→小さい

Hyper-Vの仮想マシン作成時に一番時間がかかるのが、OS入りの仮想ハードディスクのコピーだと感じています。GUI付きのWindows Server 2016をインストールしたvhdxファイルのサイズはおよそ18GBとなっています。SSDなど速いディスクであればよいのですが、少し前のI/O値が低いディスクを使っているとvhdxファイルのコピーだけでそれなりに時間のかかる作業となります。Windowsコンテナを見たところ、コンテナはコンテナイメージファイルを参照し、データ自体は差分ファイルを生成して利用しているのがわかります。Hyper-Vにも、チェックポイントで使われている差分ファイルの機能があります。こちらを応用して「小さい」を実現する仕様を実装したいと考えています

(01 Windowsコンテナのイメージファイル)
(01 Windowsコンテナのイメージファイル)
△→起動、停止、再起動が速い

仮想マシンの起動時間はインストールされているOSやアプリケーションによって様々です。コンテナも同様、速さを追求するのであれば、Windows Server 2016に同梱されている「Nano Server」を利用することで実現することができそうです。極限までフットプリンを小さくしたNano Serverは、起動時にロードされる情報も最小限に抑えられています。ただ、Nano Severは、リモートからPowerShellによる管理に限定されるなど、いくつか制限があるので利用するシーンを選ぶ必要があります。GUI付きのWindows Server 2016は使い勝手はよいものの、やはり速さを追求するという場面では選択するのは難しそうです。もちろん、高スペックのサーバー上に展開された場合であればそれほどストレスなく利用できる場面もあるかと思いますが、速さという点においてはインストールするOS、アプリケーションによって異なるということになりそうです。

(02 Nano Server、Server Core、Full Windows Serverの比較 Microsoftの資料より)
(02 Nano Server、Server Core、Full Windows Serverの比較 Microsoftの資料より)
〇→作る、破棄、作り直しが簡単にできる

上記の「小さいこと」とも関係がありますが、差分ファイルを利用してvhdxのファイルサイズを小さくすることで、時間の短縮を図ります。仮想ディスクの差分ファイルを利用して仮想マシンを作成する方法はすでに利用している方も多くいると思いますが、親ファイルを指定して差分ファイルの作成~コンテナとしての仮想マシンの作成を一連の作業としてまとめることで、これまで個別のステップで行っていた作業を簡略化します。さらに、差分ファイルはHyper-Vマネージャーのウィザードや、PowerShellのコマンドからその親子関係を把握することができたのですが、よりその関係性を簡単に分かりやすくするための工夫も行いたいと思います。

(03 差分ハードディスクを利用した仮想マシンの作成)
(03 差分ハードディスクを利用した仮想マシンの作成)
〇→Windowsだけではなく、他のOSも同様に利用できる

Windowsユーザーであれば、リモートデスクトップの利便性は今更述べる必要もないかと思います。Windows OSも利用できるので、リモートデスクトップも当然利用できる仕様となります。さらに、CentOSやUbuntuでもデスクトップ環境を提供しているものであれば同様にデスクトップ操作が可能となります。ただし、OSによっては、PowerShellやコマンドのみ提供しているものがありますので、こちらは利用状況次第ということになります。

(04.jpg 様々OSとデスクトップ)
(04.jpg 様々OSとデスクトップ)
〇→PowerShellで操作できる

これから作成しようとしているコンテナはHyper-Vで利用できるPowerShellのコマンドと組み合わせてAPIとして作成します。PowerShellではコマンドを組み合わせて作成した関数をモジュールとして保存することで、独自のコマンドとして定義することができます。PowerShellで作成したモジュールは、内容自体を公開して、独自にカスタマイズして利用できるようにすることで、ユーザーにとってより使いやすい開発環境を提供します。

〇→GUIで操作できる

コマンド操作オンリーとなりがちなコンテナ技術ですが、せっかくWindows上で利用できるわけですから、GUIからも操作できるようにしたいと考えています。Hyper-Vマネージャーからの操作はもちろん可能ですが、チェックポイントのようなツリー構造を持ったコンテナを視覚的に認識するために、専用のGUIツールを提供します。このツールは基本的には作成したオリジナルのPowerShellモジュールをAPIとして利用することで、コマンド操作とGUI操作の差を無くします。

△→Dockerコマンドで操作できる

オリジナルのモジュールを作成して利用するので、Dockerのコマンドに合わせてコマンド定義すれば可能ですが、後述するようにDockerのコンテナ自体と互換性を取ることができないため、無理にコマンドを合わせる必要は感じられません。コンテナとしてのコマンドであれば、開発中の「Docker-PowerShell」のコマンドの名前付けが適切だと思い、こちらに合わせて定義します。

×→Dockerコンテナ、Windowsコンテナと互換性がある

DockerコンテナやWindowsコンテナは、仮想マシンの一つとしてHyper-V上で展開することができません。仮想マシンとして利用できないコンテナは、今回の仕様では互換性をとることができないものとなります。

〇→コンテナから通常の仮想マシンとして再利用できる

ツリー構造で展開されるコンテナは、差分ファイルの集合体となっています。Hyper-Vマネージャーから見た場合は通常の仮想マシンとして確認することができます。親子関係にある差分ファイルをすべて結合して、1つの仮想ハードディスクファイルとして仮想マシンを作成することも可能です。

△→レポジトリでコンテナイメージを共有できる

DockerとWindowsコンテナではパブリックレポジトリとしてインターネット上でコンテナイメージの共有が可能です。コンテナの基本となるコンテナOSイメージは、Windowsコンテナの場合、Microsoftが公式に提供したものを利用しています。フリーのOSであれば、コンテナのイメージをパブリックな場所で公開提供したとしても問題はありませんが、ライセンスが必要なWindows OSの場合は、簡単に公開することはできません。社内などクローズドなネットワーク内できちんとライセンス管理がされた状態であれば、コンテナイメージとなるOSインストール済みの仮想ハードディスクを共有、公開することは可能となります。

(05.jpg Dockerのパブリックレポジトリ)
(05.jpg Dockerのパブリックレポジトリ)

以上の要件を踏まえたうえで、実際にHyper-Vの仮想マシンを利用してコンテナ技術を実現するためのシステム開発を進めていきましょう。

次回からは要件を実現するためのコンセプトや、構成、コードの記述など1つずつ進めていきます。

樋口 勝一

GMOインターネット株式会社

1999年6月GMOインターネットに入社。Windowsを用いたホスティング事業の立ち上げの際、サービス開発からその後の保守・運用まで1人で担当。2010年には「お名前.comWindowsデスクトップ」をリリースし、マイクロソフト社と強い信頼関係を構築。2007年から連続で「マイクロソフトMVPアワード」を受賞し、Windowsのスペシャリストとして活躍。

執筆者一覧

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V
GMOインターネット株式会社 樋口 勝一 著

◇Hyper-Vのさまざまな機能がわかる
◇インストールからの操作手順を解説
◇チェックポイントやレプリカも活用できる
Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。
本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

詳細はこちら → Amazonインプレスブックス

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド
GMOインターネット株式会社 樋口 勝一 著

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

詳細はこちら