<目次>
(1) コンテナとは?VMとの違いを交えてご紹介
(1-1) コンテナとは?
(1-1-1) コンテナの仕組み概要
(1-1-2) コンテナの利点は?
(1-1-3) コンテナの便利な使い道
(1-2) コンテナとVMの違いは?
(1-2-1) VMの仕組み概要
(1-2-2) VMの利点は?
(1-3) 両者の違い:「仮想化しているレイヤー」がそもそも違う
(1-4) 両者の違い:OSを共有するかどうか?
(1) コンテナとは?VMとの違いを交えてご紹介
(1-1) コンテナとは?
(1-1-1) コンテナの仕組み概要
「コンテナ」は1つのOS上にアプリケーションが動作するための「コンテナ」と呼ばれる「論理的な箱」を設けて、コンテナ毎にライブラリやアプリケーションをデプロイする事で、各コンテナ単位で個別のサーバ/OSのように機能させる技術です。
OS上にコンテナエンジン(Dockerなど)が存在し、各コンテナの制御を担っています。
VMではそれぞれがゲストOSを保持しているのに対して、コンテナではアプリケーションとライブラリやその依存関係のみなので、非常に軽量で高速に動作する事を実現しています。
(図111)コンテナのイメージ図
・コンテナが載るOSは仮想OS(VM)でも可能です。
(1-1-2) コンテナの利点は?
(表)コンテナの利点
コスト削減 | コンテナによりハードウェアの費用削減 |
コスト削減 | コンテナ群は同一のOS上で動くため、ハードのリソース消費を抑える事ができる(VMのように沢山OSがあるとリソース消費が激しい) |
疎結合 | アプリケーション実行環境同士が「コンテナ」で分かれており、依存性が低い。 |
疎結合 | 「OS」と「アプリケーション」の依存関係を排除できる |
高性能 (高速&軽量) |
コンテナはゲストOSが不要なので、VMと比較して「高速(数秒で起動)」かつ「軽量(数MB程度)」かつ「メモリの消費も少ない」という利点があります。 |
可搬性 | コンテナは、OSやハード問わず動作するため、可搬性が高い。 |
運用コスト削減 | デプロイ時間の短縮 |
運用コスト削減 | OS上で複数のコンテナが稼働するため、管理するOSの数を劇的に減らす事ができます。 |
(1-1-3) コンテナの便利な使い道
(例)複数バージョンの実行環境を1つのOSで管理
⇒例えば、Java7の環境も、Java8の環境も両方残したい場合など。
(例)様々なOSで動作させた場合の移送が便利!
⇒Javaの実行環境が載るOSをLinux(物理)⇒Windows(クラウド)と移送する場合、通常なら新しく環境を構築(インストール作業など)をする必要がありますが、コンテナの場合はそのまま配置するだけで直ぐ動くので実行環境を構築する手間が省けます。
(1-2) コンテナとVMの違いは?
「コンテナ」はアプリケーションが載る基盤に関わらず、「環境間の移行を素早く」かつ「安定的に稼働」させるためのソリューションとして誕生しており、よく「VM」と比較され混同しやすいですが、両者の違いを把握するために、まずはVMについて簡単に触れさせて頂きます。
(1-2-1) VMの仕組み概要
VMは1つのサーバ上で複数の異なる仮想OSを作成・起動できる仕組みです。その根幹を担うのが「Hypervisor」という仮想化ソフトウェアで、各VMの生成してリソース(メモリやCPU)を割り当てて、それを実行する役割をHypervisorにて担っています。それぞれが独立したOS(ゲストOS)であるが故に、本来よりもメモリ消費が多くなるなど、リソースが逼迫するリスクがあります。
VM Hypervisor |
Hypervisorは「VMM」(Virtual Machine Monitor)とも呼ばれており、VMを生成・実行するためのソフトウェアです。Hypervisorを使う事で1つのホストマシンで、複数のゲストOS(VM)をメモリやCPU等のリソースを分け合いながら、運用する事が可能となります。 |
(図121)
(1-2-2) VMの利点は?
またVMのメリットとしては次のような点が挙げられます。
(表)VMの利点
コスト削減 | OSの仮想化によりハードウェアの費用を削減 |
疎結合 | 複数のOSがお互いに影響なく共存できる |
疎結合 | 「サーバ」と「OS」の依存関係を排除できる |
可搬性 | VMは物理サーバ間の移動が容易(ファイルコピー等で移動可能) |
(1-3) 両者の違い:「仮想化しているレイヤー」がそもそも違う
VMは「ハードウェアレベル」で仮想化(HW上に複数の仮想OSを稼働)しており、「ハードウェア」に依存しない「OS」を作る事ができます(仮想マシンをコピーすれば、どんなハード上でも動く)。
一方でコンテナは「OSレベル」での仮想化(OS上に複数のコンテナ=論理的な箱を稼働)しており、「OS」に依存しない「アプリケーション」を作る事ができます(コンテナエンジンさえあれば、後はコンテナをコピーすれば、どんなOSでも動く)
(図131)VM vs コンテナの比較図
(1-4) 両者の違い:OSを共有するかどうか?
上述の通り、コンテナは「まるでOS」のように振る舞う事ができますが、実際はOSではなく、ホストOSのリソースをコンテナ間で「共有」している点がVMとは異なります(VMは独立してOSを持つので、それぞれのOSで確保しているリソースを独占できる)。