仮想化技術基礎

【図解】アプリ仮想化/コンテナと仮想マシンの違いと仕組み

アプリケーション仮想化とは

アプリケーション仮想化とは、あるアプリケーションの OS との依存関係を緩めるソリューションのことです。

主にシンクライアント (仮想デスクトップ環境など) とともに発展したソリューションです。

仮想アプリケーションの利用シーン

アプリケーションを仮想化すると、アプリケーション実行環境をファイルにパッケージ化できるため、ライブラリ等の依存関係が無くなります

さらにそれを適したユーザのみに利用させることができるため、ライセンス管理にも利用できます

例えば以下の利用シーンがあります。

1. OS バージョン依存のアプリ

仮想デスクトップの OS が Windows10 の環境で、どうしても Windows7 でしか動作しないアプリケーションを動かしたい!という場合、そのアプリを Windows7 上でパッケージ化し、それを Windows10 上で実行する、という使い方ができます。

2. アプリの新旧バージョン混在環境

ある Web アプリが IE9 等の昔のバージョンにしか対応していない場合、IE の互換表示機能を使う選択肢もありますが、その Web アプリアクセス時にアプリケーション仮想化で IE9 を配信することもできます。

つまり、普段の Web アクセスはデスクトップにインストールされた IE11 を使い、その Web アプリへアクセスするときだけ仮想アプリケーションの IE9 を使うのです。

3. デスクトップの効率性やライセンス管理

仮想デスクトップは数百台以上の仮想 PC を個別管理させることもできますが、1 つの共通イメージで管理することも可能です。つまり 1 台の共通イメージに Windows Update なりソフトウェアの追加や更新を行えば、管理下の全ての仮想 PC にその変更が反映できるのです。

この方式を「リンククローン」方式と言います。詳細は以下を参照下さい。

【図解】仮想デスクトップ(VDI)の仕組み~仮想サーバとの違い,VMware Horizonでの構成例~
仮想デスクトップとは 仮想デスクトップとは、大量のクライアントPCを仮想基盤上の...

ですがこの時の問題として、「あるユーザしか使わない大容量のソフトウェア」を共通イメージにインストールすると効率が悪いです。また、同時利用ライセンス数が 5 しか無い高価なソフトを共通イメージに入れてしまうとライセンス管理が困難です。

そこでユーザが認証を行った上で WebUI 等で要求し、資格情報が合致した場合にデスクトップへ仮想アプリケーションを配信する、といった仕組みにすることができます。

4. BYOD におけるアプリ環境の統一

最近は自分が保有している端末 (PC やタブレット、スマホ等 ) を持ち込ませて使わせる、BYOD (Bring Your Own Device) が流行って来ています。

そのようなデバイスにも、社内のユーザライセンスアプリを使わせたいというときにはアプリ仮想化が有効です。

ただし、デバイスライセンスのソフトウェアはライセンス違反になりますので注意しましょう。

アプリケーション仮想化ソリューションの種類

初期のアプリケーション仮想化としては Citrix の XenApp が有名です。

XenApp はもともとはメタフレームと呼ばれる画面転送型のシンクライアントシステムでしたが、仮想デスクトップ XenDesktop と共に利用されることもあります。

今では VMware の AppVolume や Microsoft の App-V、Numecent の CloudPaging 等が出てきています。

一般的な仮想アプリケーションの作り方

まずは仮想アプリを作成する PC を用意します。仮想アプリを作成するときはできるだけ余計なアプリが無い PC が望ましいので、仮想 PC だと便利です。仮想アプリ作成後にはスナップショット等で元に戻せばまた他の仮想アプリ作成に使えるからです。

また、作成する PC はできればその仮想アプリを利用する PC と同じ OS バージョンが望ましいですが、「古い OS にしか対応していないアプリを仮想化したいんだ」という場合は仕方ないので古い OS の PC で作成しましょう。

以下に手順の概要を図示します。

この手順を行うと、インストール時のディスク等の状態差分が抽出され、それがパッケージ化 (ファイル化) されます。このパッケージファイルには「仮想アプリ実行環境」を利用するための軽量ライブラリも含まれます。

コンテナとは

コンテナとは、アプリケーション実行環境を OS から切り離すソリューションです。こう書くと『仮想アプリケーションと同じ』に聞こえると思います。

確かに共に OS とアプリを切り離すという点で共通していますが違いはどこにあるのでしょうか。

コンテナと仮想アプリケーションの違い

仮想アプリケーションはシンクライアント分野で育ちましたが、コンテナは仮想サーバ分野から育ったものです。

それ自体が違いの 1 つですが、それゆえモチベーションも異なります。

仮想アプリケーションは前述の通り、仮想デスクトップの効率化が主な目的であり、シンクライアントソリューションのオプションのような存在です。

一方、コンテナはもともと仮想サーバのように、1つの物理サーバ上 (正確には OS 上) に複数アプリを独立して動作させ、効率性や移植性を高めることが目的です。

コンテナと仮想サーバの違い

『1 つの物理サーバ上に複数サービスが独立しているため、他の環境への移植性がある』という点は仮想サーバと共通していますが、大きく異なるのは『OS を含めるか否か』です。

コンテナでは OS が含まれないため、仮想サーバに比べて以下のメリットがあります

① 環境移行時に移植するファイルがMBオーダーからで済む
② OS を共有するため仮想サーバよりパフォーマンスが高い
③ アプリ開発環境として OS への依存度を緩めることができる

以下にコンテナと仮想サーバの違いを示します。

特に③については、開発環境やテスト環境から本番環境への移行が楽になり、アプリ開発サイクルの加速に繋げることができます。

サーバーレスとは

サーバーレスとは、サーバーを用意することなくコードだけを実行する、主にクラウドサービスとして提供される仕組みです。

何かしらのイベントをきっかけに動き出し、数分を目安に実行が完了するようなプログラムを実行できます。

サーバーを専有することなく、必要なタイミングで必要なリソースだけ使うことで、クラウド利用料金を抑えることができることが主な特徴です。

例えば AWS では『AWS Lambda (ラムダ)』というサービスがあり、プログラム言語としては 2021 年現在では「Java、Go、PowerShell、Node.js、C#、Python、Ruby 」がサポートされています。

コメント

タイトルとURLをコピーしました