「コンテナ」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「コンテナ とは、LinuxでいえばLXCDockerといった「プロセス空間を隔離」したOSレベルでの仮想化です。 '''読み方'''...」)
 
 
(同じ利用者による、間の2版が非表示)
行7: 行7:
  
 
== 概要 ==
 
== 概要 ==
 +
[[コンテナ]]による仮想化は、仮想マシンのモデルに比べて、軽量で、高速です。[[コンテナ]]は、
 
== コンテナと仮想マシンの違い ==
 
== コンテナと仮想マシンの違い ==
 +
=== 非仮想化環境 ===
 +
[[コンテナ]]を使わない非仮想化環境を示します。コンテナや仮想マシンを使用しない場合、OSの上で、フラットな空間でプロセスが実行されます。
 +
{|class="wikitable" style="text-align: center;"
 +
|+ 非仮想化環境のスタック
 +
|-
 +
|プロセス
 +
|プロセス
 +
|プロセス
 +
|プロセス
 +
|-
 +
| colspan="6" | OS
 +
|-
 +
| colspan="6" | 物理マシン
 +
|}
 
=== 仮想マシン ===
 
=== 仮想マシン ===
 
仮想マシンでは、以下のようなスタック構造になります。
 
仮想マシンでは、以下のようなスタック構造になります。
HWの上にホストOSがあり、ホストOSの上で仮想マシン(VM)が実行され、VMの上で、ゲストOSが動作し、ゲストOSの上でプロセスが実行されます。VMの上で動作するゲストOSは、ホストOSと異なるものが実行できます。
+
物理マシン(HW, Hardware)の上にホストOSがあり、ホストOSの上で仮想マシン(VM)が実行され、VMの上で、ゲストOSが動作し、ゲストOSの上でプロセスが実行されます。VMの上で動作するゲストOSは、ホストOSと異なるものが実行できます。
 
{|class="wikitable" style="text-align: center;"
 
{|class="wikitable" style="text-align: center;"
 
|+ 仮想マシン(VM)のスタック
 
|+ 仮想マシン(VM)のスタック
行22: 行37:
 
| colspan="2" | ゲストOS
 
| colspan="2" | ゲストOS
 
|-
 
|-
| colspan="2" | vm
+
| colspan="2" | 仮想マシン
| colspan="2" | vm
+
| colspan="2" | 仮想マシン
 
|-
 
|-
| colspan="4" | OS
+
| colspan="4" | ホストOS
 
|-
 
|-
| colspan="4" | HW
+
| colspan="4" | 物理マシン
 
|}
 
|}
  
行54: 行69:
 
| colspan="6" | OS
 
| colspan="6" | OS
 
|-
 
|-
| colspan="6" | HW
+
| colspan="6" | 物理マシン
 
|}
 
|}
 
== コンテナのメリット ==
 
== コンテナのメリット ==
 
* 起動が軽いです
 
* 起動が軽いです
* オーバーヘッドが少ないてすみます
+
* オーバーヘッドが少ないです
 +
** ファイルシステムでは、ファイルアクセスが速いです。
 
* 必要なプロセスだけ起動すれば良いです(ゲストOSは不要)
 
* 必要なプロセスだけ起動すれば良いです(ゲストOSは不要)
 +
=== 完全仮想化に比べてファイルアクセスが高速 ===
 +
完全仮想化では、ディスクI/Oの遅さが問題になりやすいです。
 +
また、ディスクイメージのファイル操作が面倒という課題もあります。
 +
 +
完全仮想化でのI/Oは、以下のような階層になります。
 +
{|class="wikitable" style="text-align: center;"
 +
|+ 完全仮想化でのファイルシステムとプロセス
 +
|-
 +
|
 +
{|class="wikitable"
 +
|-
 +
| プロセス
 +
|-
 +
| ファイルシステム
 +
|}
 +
仮想マシン
 +
|
 +
{|class="wikitable"
 +
|-
 +
| プロセス
 +
|-
 +
| ファイルシステム
 +
|}
 +
仮想マシン
 +
|-
 +
| colspan="1" | ディスクイメージ
 +
| colspan="1" | ディスクイメージ
 +
|-
 +
| colspan="2" | ファイルシステム
 +
|-
 +
| colspan="2" | ディスク
 +
|}
 +
仮想化環境のプロセスがファイルI/Oを行う場合、仮想化環境のファイルシステムにアクセスするとディスクイメージにアクセスがいきますが、ディスクイメージを読むためには、ゲストOSのファイルシステムにアクセスをし、ディスクへいきます。非仮想環境のプロセスに比べて、仮想環境とファイルシステムとディスクイメージへのアクセスのオーバーヘッドが多くなります。
 +
 +
コンテナでは、仮想マシンとは異なる、直接、限定されたファイルシステムへアクセスできるため、ファイルI/Oが高速ということになります。
 +
* ディスクのエミュレーションが不要
 +
* ファイルシステムが二重にならない
 +
{|class="wikitable" style="text-align: center;"
 +
|+ コンテナでのファイルシステムとプロセス
 +
|-
 +
|コンテナ
 +
{|class="wikitable"
 +
|-
 +
| プロセス
 +
| プロセス
 +
|}
 +
|コンテナ
 +
{|class="wikitable"
 +
|-
 +
| プロセス
 +
| プロセス
 +
|}
 +
| プロセス
 +
| プロセス
 +
|-
 +
| colspan="4" | ファイルシステム
 +
|-
 +
| colspan="4" | ディスク
 +
|}
 
== コンテナのデメリット ==
 
== コンテナのデメリット ==
 
* OSが実行できるプロセスしか実行できません。
 
* OSが実行できるプロセスしか実行できません。
 
* それぞれのコンテナから見えるカーネルは、同じカーネルであるため、コンテナから見える・アクセスできるデバイスやカーネルモジュールは、すべて同じになります。
 
* それぞれのコンテナから見えるカーネルは、同じカーネルであるため、コンテナから見える・アクセスできるデバイスやカーネルモジュールは、すべて同じになります。
 
+
== コンテナで分割されるリソース ==
 +
[[コンテナ]]ごとに分割されるリソースの例を以下に挙げます。
 +
* プロセステーブル
 +
* ファイルシステム
 +
* ネットワーク
 +
* CPU、メモリ、デバイス
 
== コンテナを実現する機能 ==
 
== コンテナを実現する機能 ==
* namespace
+
* [[namespace]]
 
* cgroups
 
* cgroups
 
=== namespace ===
 
=== namespace ===
namespace(名前空間) は、プロセスをグループ化し、隔離されたコンテナの空間を作る機能です。
+
[[namespace]](名前空間) は、プロセスをグループ化し、隔離されたコンテナの空間を作る機能です。
namespace には、以下の種類があります。
+
[[namespace]]には、以下の種類があります。
 
* マウント名前空間
 
* マウント名前空間
 
* UTS名前空間
 
* UTS名前空間
行77: 行157:
 
* ネットワーク名前空間
 
* ネットワーク名前空間
  
 +
== 仮想化技術に関連のあるもの ==
 +
* [[chroot]]
 +
* [[jail]]
 +
* [[cgroups]]
 +
* [[LXC]]
 +
* [[Docker]]
 +
 +
* [[KVM]]
 +
* [[VMware]]
 +
* Xen
 +
* FreeBSD <html><a href="/freebsd/bhyve/" target="_blank">bhyve</a></html>
 
== 関連項目 ==
 
== 関連項目 ==
 
* [[LXC]]
 
* [[LXC]]

2015年1月10日 (土) 14:18時点における最新版

コンテナ とは、LinuxでいえばLXCDockerといった「プロセス空間を隔離」したOSレベルでの仮想化です。

読み方

コンテナ
こんてな
container
こんてな

概要

コンテナによる仮想化は、仮想マシンのモデルに比べて、軽量で、高速です。コンテナは、

コンテナと仮想マシンの違い

非仮想化環境

コンテナを使わない非仮想化環境を示します。コンテナや仮想マシンを使用しない場合、OSの上で、フラットな空間でプロセスが実行されます。

非仮想化環境のスタック
プロセス プロセス プロセス プロセス
OS
物理マシン

仮想マシン

仮想マシンでは、以下のようなスタック構造になります。 物理マシン(HW, Hardware)の上にホストOSがあり、ホストOSの上で仮想マシン(VM)が実行され、VMの上で、ゲストOSが動作し、ゲストOSの上でプロセスが実行されます。VMの上で動作するゲストOSは、ホストOSと異なるものが実行できます。

仮想マシン(VM)のスタック
プロセス プロセス プロセス プロセス
ゲストOS ゲストOS
仮想マシン 仮想マシン
ホストOS
物理マシン

コンテナ

コンテナのプロセスは、ホストOSのプロセスとして実行されます。コンテナに属するプロセスは、通常のプロセス空間とは異なる隔離された空間内で実行されます。隔離空間をコンテナと呼びます。

コンテナのスタック
隔離空間
プロセス プロセス
隔離空間
プロセス プロセス
プロセス プロセス
OS
物理マシン

コンテナのメリット

  • 起動が軽いです
  • オーバーヘッドが少ないです
    • ファイルシステムでは、ファイルアクセスが速いです。
  • 必要なプロセスだけ起動すれば良いです(ゲストOSは不要)

完全仮想化に比べてファイルアクセスが高速

完全仮想化では、ディスクI/Oの遅さが問題になりやすいです。 また、ディスクイメージのファイル操作が面倒という課題もあります。

完全仮想化でのI/Oは、以下のような階層になります。

完全仮想化でのファイルシステムとプロセス
プロセス
ファイルシステム

仮想マシン

プロセス
ファイルシステム

仮想マシン

ディスクイメージ ディスクイメージ
ファイルシステム
ディスク

仮想化環境のプロセスがファイルI/Oを行う場合、仮想化環境のファイルシステムにアクセスするとディスクイメージにアクセスがいきますが、ディスクイメージを読むためには、ゲストOSのファイルシステムにアクセスをし、ディスクへいきます。非仮想環境のプロセスに比べて、仮想環境とファイルシステムとディスクイメージへのアクセスのオーバーヘッドが多くなります。

コンテナでは、仮想マシンとは異なる、直接、限定されたファイルシステムへアクセスできるため、ファイルI/Oが高速ということになります。

  • ディスクのエミュレーションが不要
  • ファイルシステムが二重にならない
コンテナでのファイルシステムとプロセス
コンテナ
プロセス プロセス
コンテナ
プロセス プロセス
プロセス プロセス
ファイルシステム
ディスク

コンテナのデメリット

  • OSが実行できるプロセスしか実行できません。
  • それぞれのコンテナから見えるカーネルは、同じカーネルであるため、コンテナから見える・アクセスできるデバイスやカーネルモジュールは、すべて同じになります。

コンテナで分割されるリソース

コンテナごとに分割されるリソースの例を以下に挙げます。

  • プロセステーブル
  • ファイルシステム
  • ネットワーク
  • CPU、メモリ、デバイス

コンテナを実現する機能

namespace

namespace(名前空間) は、プロセスをグループ化し、隔離されたコンテナの空間を作る機能です。 namespaceには、以下の種類があります。

  • マウント名前空間
  • UTS名前空間
  • PID名前空間
  • IPC名前空間
  • ユーザ名前空間
  • ネットワーク名前空間

仮想化技術に関連のあるもの

関連項目