TechReport

技術者情報

ソリューション

2017年7月19日(水)公開

第209回

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

Hyper-V上の仮想マシンとWindowsコンテナの違い

Windows Server 2016より、マイクロソフトはDocker社との協業を発表して、Windows上でDocker仕様のコンテナを利用することができるようになりました。コンテナ技術は、次の世代の仮想化の進化形とも言われているほど注目されています。
Windows Server 2016 Technical Preview 3から実際にWindowsコンテナは評価できるようになっており、以前の記事でコンテナ技術について紹介(*)しました。まずは正式にリリースされたWindows Server 2016に基づき、改めてこれまで使ってきたHyper-V上の仮想マシンと、Windowsコンテナは何が違うのかおさらいをしてみましょう。

*参考:Windows Server 2016 Technical Preview 3 で見るコンテナ技術
https://www.gmo.jp/report/single/?art_id=198

記事INDEX

仮想マシン

Hyper-Vの上では、仮想マシンが独立したメモリ、CPU、ディスク領域などを搭載して稼働しています。このため、1つ1つの仮想マシンは、他の仮想マシンやホストサーバーに影響を与えることも与えられることもなく稼働することができるようになっています(Isolation)。それぞれの仮想マシンにはOSがインストールされ、1つの完結したPCとして認識されています。

(01)Hyper-Vによる仮想化
(01)Hyper-Vによる仮想化

さらに、Hyper-V上の仮想マシンのOSはWindowsに限らずLinux系のOSもサポートされており、ユーザーの利用ニーズによって様々に使い分けることができるようになっています。これまでのサーバー構築とは異なり、ソフトウェアとしてインフラを構築できることで、展開のしやすさ、運用のしやすさなど仮想マシンがもたらしたメリットは計り知れません。今では当たり前となっているクラウドサービスは、仮想化技術無しには考えられなかったものです。

Windows Server コンテナ

「Windows Server コンテナ」では、Hyper-Vの代わりに、コンテナエンジンがWindows Server上でサービス提供を行い、その上のコンテナ内で様々なアプリケーションが稼働することになります。各コンテナにはOSやアプリケーション実行に必要なライブラリファイルなどは含まれず、アプリケーション本体のみとなり、アプリケーションとOSの分離が実現されています。必要なのは、アプリケーション本体と実行に必要なCPUリソース、ディスク領域とメモリとなります。

これによって、OSやアプリケーションの実行に必要なライブラリファイルなどは共通リソースから参照されることになり、ハードディスク領域やメモリの節約になります。コンテナの起動自体は、BIOS、OSのブートなどが不要なため、アプリケーション単体が起動するためだけの短時間で完了することとなります。コンテナごとのアプリケーションによるファイルの変更やレジストリの変更内容は、コンテナごとの「サンドボックス」と呼ばれる領域に随時書き込まれて保存されていきます。
コンテナからは、新たにコンテナのテンプレートとなるコンテナイメージを作成し保存することで、繰り返しコンテナを作成し再利用することができます。

(02)コンテナによる仮想化
(02)コンテナによる仮想化
(03)Windows Server コンテナ概念図
(03)Windows Server コンテナ概念図
Hyper-V コンテナ

Windowsコンテナに用意されているもう1つのコンテナ、「Hyper-V コンテナ」は、コンテナ内のアプリケーションが、小さな仮想マシンの中で稼働するようになっています。これによって、他のコンテナやホストOSからも隔離された状態でアプリケーションを実行することで、よりセキュアなコンテナ利用が可能となっています。

(04)Hyper-V コンテナ概念図
(04)Hyper-V コンテナ概念図
Dockerのサポート

WindowsコンテナはDockerコマンドを利用して管理するようになっています。これまでOSSでDockerコンテナを利用してきたユーザーは、同一のコマンドインターフェースでWindowsコンテナを利用できる環境が用意されています。また、パブリックなコンテナイメージの保管場所として、Docker社が提供するレポジトリも同様に利用することが可能です。Windowsコンテナ用のPowerShellのモジュールは現在開発中となっており、GitHubからダウンロードして利用できるようになっています。

Microsoft/Docker-PowerShell

コンテナを利用することのメリット

現在のサービス提供の主流な考え方の基本となっているのは、「マイクロサービス」です。サービスをできるだけ小さな単位で切り分けて、サービスのアップデートの迅速化、必要とするリソースの最小化を実現します。サービスのアップデートのみならず、セキュリティーのアップデートも迅速に行われることによって、安全性の向上も実現できます。うまくシステムの因数分解を実現することが、システムをより小さくするためには必要です。コンテナ技術によりOSなどの共通通部分を上手に保護しつつ共通化し、アプリケーションを最小単位できちんと動かすことがきるようになります。

インフラエンジニアにとって、これまで仮想マシン単位でシステムを構築していましたが、基盤となるOS部分はコンテナではすでに構築されているものを利用するだけなので、作業としてはアプリケーションに必要な部分だけ構築することになります。追加部分はコンテナイメージとして保存できるので、次回利用時にはそのまま再利用が可能です。コンテナイメージ自体はそれぞれが差分データだけなので、ファイルサイズとしてはとても小さく、検証の繰り返しによる作り直しや他のサーバーへの展開、ファイル自体の保存時間など、これまでよりも短時間であらゆる作業が可能となります。

アプリケーション開発者にとっても、コンテナ技術は大きな効用をもたらします。コンテナはより小さい構成でアプリケーションプラットフォームを構築できるため、作る、配置する、テストする、公開する、破棄するといった一連のオペレーションに要する時間が格段に短くなります。これまでサーバー管理者の手を煩わせていた作業でさえ、コンテナ技術を利用すれば、開発者自身が簡単に行うことができるようになります。

コンテナ技術は、アプリケーションの開発~運用~展開という一連の流れの中で、これまでの壁であった開発者~運用者間の隔たりを、できるだけ小さくできる可能性があります。開発者と運用者が連携してアプリケーション開発を行うDevOpsの足掛かりとなるものです。コンテナを利用したマイクロサービス化で、より短期間のサービスのデプロイ、アップデート、システムのシンプル化を実現することが可能となります。

(05)コンテナ利用のメリット
(05)コンテナ利用のメリット
Windowsコンテナのデメリット

良いことずくめのように思えるコンテナ技術ですが、現在のところいくつかの懸念事項が考えられます。

1つはWindowsコンテナで提供できるOSが、すべてWindows Serverベースのものに限られるということです。Hyper-V上の仮想マシンでは、Windows OSだけではなくLinuxもサポートされており、ユーザーが自由に使い分けることができます。ですが、WindowsコンテナとLinux上のDockerコンテナは、同じコマンドが利用できるとはいっても、今のところ互換性がありません。

2つ目は、Windowsコンテナで提供されているコンテナの元となるイメージが、「Windows Server Core」と「Nano Server」の2つであり、どちらもコマンドベースでの利用が前提となっていることです。初期の検証段階やシステムの構築段階からすべてコマンドベースで操作しなければならないのは、熟練したエンジニアであればまだしも、これからコンテナを始めようというユーザーにとっては、効率低下の原因でもあり苦痛に近いものがあるでしょう。Windowsのデスクトップ環境での視認性や操作性は言うに及びません。

もう1つは、コンテナの優位性が一般に認識されていないということです。Hyper-Vをはじめ、すでに仮想化技術はかなり作りこまれ、実使用にもほぼ満足いく結果を得られているため、安定期に入ったものと考えられます。こういった市場の中で新しい仮想化技術を積極的に採り入れるということはなかなか難しく、コンテナ技術の存在が広く認知され、利用されるようになるには時間がかかります。コンテナ技術とはどういったものか、どういった場合に使うべきものかを学ぶ必要があります。コンテナ技術でなければできないことやコンテナ技術を使う有意性を見つけ出して、既存の仮想システムにコンテナ技術をうまく採り入れ、シフトしていく必要があります。

Windows Serverで利用できるもう1つのコンテナを目指して

コンテナ技術自体のメリットとデメリットは理解できましたが、Windows ServerとHyper-Vでサービスを作り続けてきた筆者は、どうしてもHyper-Vの使いやすさから離れることができません。コンテナの考え方・技術を利用して、もっと簡単で使いやすいコンテナは作れないだろうか? と考えています。

コンテナ技術を使いこなせれば、確かに今までよりも早く、簡単にいろいろなことができそうです。でも、もうすでに手元にはHyper-Vというとても安定した仮想化環境があり、十分使いこなしている。そんな自分と同じようなユーザーのためのコンテナを、新たに提案していければと思います。

次回は、実際にHyper-Vを使ってコンテナを作るために何が必要なのか、どんな技術を利用するべきかを考えていきます。

樋口 勝一

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に必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

詳細はこちら