このドキュメントで説明するソフトウェアは、Extended SupportまたはSustaining Supportのいずれかにあります。 詳細は、https://www.oracle.com/us/support/library/enterprise-linux-support-policies-069172.pdfを参照してください。
Oracleでは、このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお薦めします。

機械翻訳について

27.1 Linuxコンテナについて

ノート

UEK R3より前では、LXCは、テストおよび評価目的で使用可能でも、本番システムでは推奨されないテクノロジ・プレビュー機能でした。 LXCは、UEK R3でサポートされている機能です。

Linuxコンテナ(LXC)機能は、物理ハードウェアのエミュレーションで仮想マシンを設定する必要のない軽量の仮想化メカニズムです。 Linuxコンテナ機能は、その基盤としてcgroupのリソース管理機能を使用し、POSIXファイル機能を追加してプロセスおよびネットワーク分離を実装しています。 単一のアプリケーションを、chrootジェイルと同様の方法で、システムの他のプロセスとは分離されたネームスペースを持つコンテナ(アプリケーション・コンテナ)内で実行できます。 ただし、Linuxコンテナの主な用途は、VirtualBoxなどのレベル2ハイパーバイザーを実行するシステム・オーバーヘッドなしでコンテナ(システム・コンテナ)でLinuxオペレーティング・システムの完全なコピーを実行することです。 実際、コンテナは、ホスト・システムとカーネルを共有するため、そのプロセスおよびファイル・システムはホストから完全に認識されます。 コンテナにログインすると、そのファイル・システムとプロセス領域のみが表示されます。 カーネルは共有されているため、ロード済のモジュールおよびドライバに制限されます。

Linuxコンテナの典型的な使用事例は、次のとおりです。

  • Oracle Linux 5コンテナとOracle Linux 6コンテナを並列に実行します。 どちらのバージョンのオペレーティング・システムも、Unbreakable Enterprise Kernelリリース2をサポートしています。 UEK R3はOracle Linux 5でサポートされていませんが、UEK R3カーネルを使用するOracle Linux 6システムでOracle Linux 5コンテナを実行することもできます。 また、x86_64カーネルでi386コンテナを実行することもできます。 ただし、i386カーネルでx86_64コンテナを実行することはできません。 詳細は、27.1.1項「サポートされているOracle Linuxコンテナのバージョン」.を参照してください。

  • Oracle Linux 5でのみサポートされているアプリケーションを、Oracle Linux 6ホスト上のOracle Linux 5コンテナで実行します。 ただし、使用可能なモジュールおよびドライバに非互換性が存在する可能性があります。

  • 同じシステム上でアプリケーション構成の多くのコピーを実行します。 サンプル構成はLAMPスタックであり、Linux、Apacheサーバー、MySQL、およびPerl、PHPまたはPythonスクリプトを組み合せて、特化したWebサービスを提供します。

  • 開発およびテスト用のサンドボックス環境を作成できます。

  • リソースを詳細に制御できるが、完全な仮想化ソリューションのハードウェア・リソースを必要としないユーザー環境を提供します。

  • 各コンテナが独自のIPアドレスを持つように見えるコンテナを作成します。 たとえば、lxc-sshdテンプレート・スクリプトを使用して、信頼できないユーザー用に分離された環境を作成することができます。 各コンテナは、sshdデーモンを実行してログインを処理します。 コンテナの仮想イーサネット・インタフェースがホストのネットワーク・インタフェースにブリッジすることにより、各コンテナはLAN上で独自のIPアドレスを持つように認識されます。

lxc-startコマンドを使用してシステム・コンテナを起動すると、デフォルトでは、コンテナの/sbin/initのコピーが起動され、コンテナのプロセス領域で他のプロセスを生成します。 システム・コールまたはデバイス・アクセスは、ホスト上で稼働しているカーネルによって処理されます。 ホストで異なるカーネル・バージョンまたは異なるオペレーティング・システムを実行する必要がある場合、Linuxコンテナのかわりに、Oracle VMやOracle VM VirtualBoxなど、実際の仮想化ソリューションを使用します。

コンテナを適切に実行するため、ファイル・システム・イメージ上で実行する必要のあるいくつかの構成ステップがあります。

  • ハードウェアに直接アクセスするモジュールをロードするinitスクリプトをすべて無効にします。

  • udevを無効にし、かわりに、コンテナ内からアクセスできる必要があるあらゆるハードウェア用の静的デバイス・ノードを/devに作成します。

  • ネットワーク・インタフェースが、ホスト・システムのネットワーク・インタフェースにブリッジされるように構成します。

LXCには、システム・コンテナに必要な構成の多くをユーザーにかわって実行する複数のテンプレート・スクリプトが/usr/share/lxc/templatesに提供されています。 ただし、スクリプトでは実際のシステム構成の動作特性を予測できないため、通常はコンテナが正しく動作するようにスクリプトを変更する必要があります。 テンプレート・スクリプトを起動してシステム・コンテナを作成するには、lxc-createコマンドを使用します。 たとえば、lxc-busyboxテンプレート・スクリプトは軽量のBusyBoxシステム・コンテナを作成します。

この章の例で使用されているシステム・コンテナは、Oracle Linux用のテンプレート・スクリプト(lxc-oracle)を使用しています。 このコンテナは、スナップショット機能を利用してbtrfsファイル・システム上に作成されます(/container)。 btrfsファイル・システムでは、コンテナのルート・ファイル・システム(rootfs)を含むサブボリュームを作成し、そのサブボリュームをクローニングすることで、新しいコンテナをすばやく作成することができます。

コントロール・グループを使用すると、コンテナで実行中のWebサーバーやデータベースなどのアプリケーションで使用できるシステム・リソースを制限できます。

アプリケーション・コンテナはテンプレート・スクリプトを使用しては作成されません。 そのかわりに、アプリケーション・コンテナではホストのrootファイル・システムの全部または一部をマウントしてアプリケーションに必要なバイナリおよびライブラリへのアクセスを提供します。 lxc-executeコマンドを使用してコンテナ内のlxc-init (/sbin/initの簡易バージョン)を起動します。lxc-init/proc, /dev/shm/dev/mqueueなどの必要なディレクトリをマウントして、指定したアプリケーション・プログラムを実行した後、その実行の終了を待機します。 アプリケーションが存在する場合、コンテナ・インスタンスは消滅します。