コンテナ
コンテナ とは、LinuxでいえばLXCやDockerといった「プロセス空間を隔離」したOSレベルでの仮想化です。
読み方
- コンテナ
- こんてな
- container
- こんてな
目次
概要
コンテナによる仮想化は、仮想マシンのモデルに比べて、軽量で、高速です。コンテナは、
コンテナと仮想マシンの違い
非仮想化環境
コンテナを使わない非仮想化環境を示します。コンテナや仮想マシンを使用しない場合、OSの上で、フラットな空間でプロセスが実行されます。
プロセス | プロセス | プロセス | プロセス | ||
OS | |||||
物理マシン |
仮想マシン
仮想マシンでは、以下のようなスタック構造になります。 物理マシン(HW, Hardware)の上にホストOSがあり、ホストOSの上で仮想マシン(VM)が実行され、VMの上で、ゲストOSが動作し、ゲストOSの上でプロセスが実行されます。VMの上で動作するゲストOSは、ホストOSと異なるものが実行できます。
プロセス | プロセス | プロセス | プロセス |
ゲストOS | ゲストOS | ||
仮想マシン | 仮想マシン | ||
ホストOS | |||
物理マシン |
コンテナ
コンテナのプロセスは、ホストOSのプロセスとして実行されます。コンテナに属するプロセスは、通常のプロセス空間とは異なる隔離された空間内で実行されます。隔離空間をコンテナと呼びます。
隔離空間
|
隔離空間
|
プロセス | プロセス | ||||
OS | |||||||
物理マシン |
コンテナのメリット
- 起動が軽いです
- オーバーヘッドが少ないです
- ファイルシステムでは、ファイルアクセスが速いです。
- 必要なプロセスだけ起動すれば良いです(ゲストOSは不要)
完全仮想化に比べてファイルアクセスが高速
完全仮想化では、ディスクI/Oの遅さが問題になりやすいです。 また、ディスクイメージのファイル操作が面倒という課題もあります。
完全仮想化でのI/Oは、以下のような階層になります。
仮想マシン |
仮想マシン | ||||
ディスクイメージ | ディスクイメージ | ||||
ファイルシステム | |||||
ディスク |
仮想化環境のプロセスがファイルI/Oを行う場合、仮想化環境のファイルシステムにアクセスするとディスクイメージにアクセスがいきますが、ディスクイメージを読むためには、ゲストOSのファイルシステムにアクセスをし、ディスクへいきます。非仮想環境のプロセスに比べて、仮想環境とファイルシステムとディスクイメージへのアクセスのオーバーヘッドが多くなります。
コンテナでは、仮想マシンとは異なる、直接、限定されたファイルシステムへアクセスできるため、ファイルI/Oが高速ということになります。
- ディスクのエミュレーションが不要
- ファイルシステムが二重にならない
コンテナ
|
コンテナ
|
プロセス | プロセス | ||||
ファイルシステム | |||||||
ディスク |
コンテナのデメリット
- OSが実行できるプロセスしか実行できません。
- それぞれのコンテナから見えるカーネルは、同じカーネルであるため、コンテナから見える・アクセスできるデバイスやカーネルモジュールは、すべて同じになります。
コンテナで分割されるリソース
コンテナごとに分割されるリソースの例を以下に挙げます。
- プロセステーブル
- ファイルシステム
- ネットワーク
- CPU、メモリ、デバイス
コンテナを実現する機能
- namespace
- cgroups
namespace
namespace(名前空間) は、プロセスをグループ化し、隔離されたコンテナの空間を作る機能です。 namespaceには、以下の種類があります。
- マウント名前空間
- UTS名前空間
- PID名前空間
- IPC名前空間
- ユーザ名前空間
- ネットワーク名前空間
仮想化技術に関連のあるもの
関連項目
ツイート