【仮想化】コンテナ型仮想化とは・ホスト型やハイパーバイザ型との違い

▼この記事をSNSでシェアする▼

スポンサーリンク

スポンサーリンク

補足

この記事は仮想化(サーバー・ストレージ・ネットワークとか)についてある程度理解ができる人向けの記事になっています。

参考記事:最近話題の仮想化って何?ITテクノロジー「仮想化」を解説します!

よくわからねえなあって人は、上の記事を見てみよう。

1.コンテナ型仮想化とは

一言でいうと、

ホストOSの上にゲストOSを起動せず、ゲストOS対応のアプリを起動する仕組みである。

要は効率的な仮想マシン立ち上げ機能である。

正確には仮想マシン上のアプリのみを起動する仕組みです。

コンテナというのは正確にはサーバーコンテナエンジンを指しています。

一般的な(?)の仮想化ではホストOSの上に(またはハイパーバイザ上に)ゲストOSを起動させてその上のアプリを動かす仕組みでした。

しかし、サーバーコンテナエンジンでは動かしたいアプリとそれに依存するホストOSのライブラリやフレームワークを1つにまとめる。ホストOSとそのコンテナのみがデータのやり取りをするので、効率的な仮想化と言えるのです。

まあ字だけで説明してもイメージしづらいので、技術的な話に突っ込んでしまいますが、図を使ってできるだけイメージしやすいように説明していきます。

2.コンテナ型仮想化の細かい仕組み

簡単に図示するとこんな感じ。ハイパーバイザ型やホスト型の仮想化とも比較してもいただこう。

違いは何となくわかるでしょうか

コンテナエンジンは、ゲストOSの起動をせずに、ゲストOS対応のアプリを起動させる仕組みです。(繰り返しですがこれが一番大事なポイント!)

ハイパバイザ型ではホストOSの起動とかは要りませんが、やはりゲストOSの起動を必要としています。これが要らなくなったという点で、コンテナエンジンというのはだいぶ画期的な技術です。

サーバーコンテナエンジンでは、ホストOSを起動させてのちに、コンテナエンジンを起動し、ホストOSに対応するライブラリ(実行ファイル・プログラム・ミドルウェアとか)を読み込んで任意のアプリケーションのみを起動させます。

3.コンテナ型仮想化の注意点

ゲストOSでどんなOSも起動できるわけでなく、カーネルが同じOSでかつホストOSのカーネルのバージョンがゲストOSのそれより新しいという条件を満たさないとコンテナとして起動できないということです。

※カーネルというのはOSの中核を指していて、UNIXとかLinuxとかWindowsっていうのはこのカーネルを指します。

※Windowsにもいろいろ種類があるようにLinuxにもUbuntuやCentOSやRHEL(RedHat社)などいろいろ種類があります。

※ほかにもいろんな縛りはありますが・・・

この図はCentOS7(Linux)をホストOSにしています。そしてそれよりもカーネルが古いRHEL6やCentOS5のアプリケーションが載っています。

上で説明した二つカーネルの条件を満たしています。

左のようにホストOSのカーネルがゲストOSのカーネルよりも古いとだめです。カーネルは全部Linuxなんだけども。

また右のように、CentOS7(Linux)の上にSolaris10(UNIX系OS)やWindows10といったカーネルの違うOSはコンテナエンジンに載せられません。

4.コンテナ仮想化のメリット・デメリット

4.1.メリット

  • とにかく処理が軽量(コスト・パフォーマンスアップ)
  • アプリの起動が速い
  • 環境構築が簡単
  • 環境のコピーも簡単

とにかくゲストOSの設定や起動を必要としないという点が最大のポイント。

だから、システム開発に応じて必要な開発環境の大きなコストや必要な時間を節約できる。

またアプリの開発環境をコンテナで作って、それをほかの人の開発のために同じ環境を作るときはコンテナに載っている実行ファイルのライブラリをコピーするだけでよいので、環境構築が非常に楽です。

ホスト型やハイパーバイザ型だと、ゲストOSのインストールからやらなきゃいけないです。

OSは載っていないように見えますが、仮想OSのように個々のコンテナにIPアドレスを振ったりできます。つまりコンテナも仮想OSのように扱えます。

4.2.デメリット

  • ミッションクリティカルなシステムには向かない。(障害時の切り替えに向かない)
  • カーネルをそろえなければならない
  • Windowsは古いものだとコンテナに対応していない。
  • サポートもすくない。

つまり載せられるOSには制限や縛りが多い

まあまだまだ普及の途上にある技術なのでしょうがないですね。

可用性を維持する仕組みであったり、コンテナの運用に精通したエンジニアが少ないので、導入や運用の障壁はまだまだ高いように思えます。

5.トレンド製品

Docker→Kubernetesという感じです。(浅い)

DockerではホストOS間の連携が煩雑で、リソースが増えたときにスケールアウトするのが難しかったですが、Kubernetesは複数のホストOSからなる実行環境をあたかも一つの実行環境として扱うことができます。

Kubernetesを使う際はコンテナのイメージや台数を指定するだけで管理でき、スケールアウトしたいときもノードを増やすだけでよく、運用がだんだんと楽になっています

※スケールアウト:システムのリソース(CPU、メモリ、記憶領域など)を増やすこと。

6.コンテナ型仮想化の実用例

みなさんもよく知っているであろうPokemonGoの実行環境もコンテナです。Googleもコンテナ型のシステムを採用しているそうです。

なんせいままでのサーバー仮想化の何倍もゲストOSとアプリが載りますから、リソースやコストも大幅に節約できますから、導入できるならしない手はないですよね。

まだWebアプリの開発環境のためにコンテナを使うみたいなケースが多く実際の環境での運用はまだまだすくないですが、コンテナ製品がもっとメジャーになったら、導入が進むと思われます。

スポンサーリンク

▼この記事をSNSでシェアする▼

フォローする

メニュー・主な記事カテゴリ

おすすめ特集!




「ゆとり鳥日記」について
ITを中心に関心の赴くままに好きなように書いていく雑記ブログ!管理人が二人います。
◆フクロウ(19卒就活生)
◆トンビ(社会人1年目SE)

詳しいプロフィール
お仕事の依頼・ご要望

ゆとり鳥日記をBTCで応援する