1 Linuxコンテナについて
警告:
Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。
できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。
この章では、Linuxコンテナ(LXC)およびサポートされているOracle Linuxコンテナのバージョンの概要について説明します。
Linuxコンテナに関する情報は、次のソースでも入手できます。
-
Docker Engineを使用してアプリケーション・コンテナを作成する方法を説明するOracle Linux: Oracle Container Runtime for Dockerユーザー・ガイド。
詳細は、https://wiki.archlinux.org/index.php/Linux_ContainersおよびLXCマニュアル・ページを参照してください。
Linuxコンテナについて
ノート:
UEK R3より前では、LXCは、テストおよび評価目的で使用可能でも、本番システムでは推奨されないテクノロジ・プレビュー機能でした。LXCは、UEK R3およびUEK R4のサポートされている機能です。
LXC機能は、物理ハードウェアのエミュレーションで仮想マシンを設定する必要のない軽量の仮想化メカニズムです。この機能では、その基盤としてcgroupリソース管理機能を使用し、POSIXファイル機能を追加してプロセスおよびネットワーク分離を実装しています。単一のアプリケーションを、chrootジェイルと同様の方法で、システムの他のプロセスとは分離されたネームスペースを持つコンテナ(アプリケーション・コンテナ)内で実行できます。ただし、LXCの主な用途は、VirtualBoxなどのレベル2ハイパーバイザを実行するオーバーヘッドなしで、コンテナ(システム・コンテナ)でLinuxオペレーティング・システムの完全なコピーを実行できるようにすることです。実際、コンテナは、ホスト・システムとカーネルを共有するため、そのプロセスおよびファイル・システムはホストから完全に認識されます。コンテナにログインすると、そのファイル・システムとプロセス領域のみが表示されます。カーネルは共有されているため、ロード済のモジュールおよびドライバに制限されます。
Linuxコンテナの典型的な使用事例は、次のとおりです。
-
Oracle Linux 5、Oracle Linux 6、およびOracle Linux 7コンテナを並列に実行します。UEK R3およびUEK R4はOracle Linux 5ではサポートされていませんが、UEK R3またはUEK R4カーネルを使用するOracle Linux 7システムではOracle Linux 5コンテナを実行できます。また、x86_64カーネルでi386コンテナを実行することもできます。詳細は、サポートされているOracle Linuxコンテナのバージョンを参照してください。
-
Oracle Linux 5でのみサポートされているアプリケーションを、Oracle Linux 7ホスト上のOracle Linux 5コンテナで実行します。ただし、使用可能なモジュールおよびドライバに非互換性が存在する可能性があります。
-
同じシステム上でアプリケーション構成の多くのコピーを実行します。サンプル構成はLAMPスタックであり、Linux、Apache HTTPサーバー、MySQL、およびPerl、PHPまたはPythonスクリプトを組み合せて、特化したWebサービスを提供します。
-
開発およびテスト用のサンドボックス環境を作成できます。
-
リソースを詳細に制御できるが、完全な仮想化ソリューションのハードウェア・リソースを必要としないユーザー環境を提供します。
-
各コンテナが独自のIPアドレスを持つように見えるコンテナを作成します。たとえば、
lxc-sshd
テンプレート・スクリプトを使用して、信頼できないユーザー用に分離された環境を作成することができます。各コンテナは、sshdデーモンを実行してログインを処理します。コンテナの仮想イーサネット・インタフェースがホストのネットワーク・インタフェースにブリッジすることにより、各コンテナはLAN上で独自のIPアドレスを持つように認識されます。
lxc-startコマンドを使用してシステム・コンテナを起動すると、デフォルトでは、コンテナの/sbin/init
(Oracle Linux 6以前のコンテナの場合)または/usr/lib/systemd/systemd
(Oracle Linux 7コンテナの場合)のコピーが起動され、コンテナのプロセス領域で他のプロセスを生成します。システム・コールまたはデバイス・アクセスは、ホスト上で稼働しているカーネルによって処理されます。ホストで異なるカーネル・バージョンまたは異なるオペレーティング・システムを実行する必要がある場合は、Linuxコンテナではなく、Oracle VMやOracle VM VirtualBoxなど、完全な仮想化ソリューションを使用します。
コンテナを正しく実行するには、次のステップが完了していることを確認してください。
-
ハードウェアに直接アクセスするモジュールをロードする
init
またはsystemd
スクリプトをすべて無効にします。 -
udev
を無効にし、かわりに、コンテナ内からアクセスできる必要があるあらゆるハードウェア用の静的デバイス・ノードを/dev
に作成します。 -
ネットワーク・インタフェースが、ホスト・システムのネットワーク・インタフェースにブリッジされるように構成します。
LXCには、システム・コンテナに必要な構成の多くをユーザーにかわって実行する複数のテンプレート・スクリプトが/usr/share/lxc/templates
に提供されています。ただし、スクリプトでは実際のシステム構成の動作特性を予測できないため、通常はコンテナが正しく動作するようにスクリプトを変更する必要があります。テンプレート・スクリプトを起動してシステム・コンテナを作成するには、lxc-createコマンドを使用します。たとえば、lxc-busybox
テンプレート・スクリプトは軽量のBusyBoxシステム・コンテナを作成します。
この章の例で使用されているシステム・コンテナは、Oracle Linux用のテンプレート・スクリプト(lxc-oracle
)を使用しています。このコンテナは、スナップショット機能を利用してbtrfsファイル・システム上に作成されます(/container
)。btrfsファイル・システムでは、コンテナのルート・ファイル・システム(rootfs
)を含むサブボリュームを作成し、そのサブボリュームをクローニングすることで、新しいコンテナをすばやく作成することができます。
コントロール・グループを使用すると、コンテナで実行中のWebサーバーやデータベースなどのアプリケーションで使用できるシステム・リソースを制限できます。
アプリケーション・コンテナはテンプレート・スクリプトを使用しては作成されません。そのかわりに、アプリケーション・コンテナではホストのrootファイル・システムの全部または一部をマウントしてアプリケーションに必要なバイナリおよびライブラリへのアクセスを提供します。lxc-executeコマンドを使用してコンテナ内の/usr/sbin/init.lxc
(/sbin/init
の簡易バージョン)を起動します。init.lxc
は/proc
、/dev/shm
、/dev/mqueue
などの必要なディレクトリをマウントして、指定したアプリケーション・プログラムを実行した後、その実行の終了を待機します。アプリケーションが存在する場合、コンテナ・インスタンスは消滅します。