開発・運用環境

コンテナ型仮想化

ホストのカーネルを共有してアプリケーションと依存関係を隔離する、軽量で再現性の高い実行方式です。仮想マシンとの差、GPU利用時に必要なランタイム、分離の限界を整理します。

  • B|標準
  • 開発・運用環境

数式の記号で止まったら 記号の読み方 (∂・⊙・転置・上付き添字を、読み方から)

ひとことで言うと

コンテナ型仮想化は、ホストOSのカーネルを共有しながら、プロセス、ファイルシステム、ネットワークなどの見える範囲を分離してアプリケーションを動かす方式です。ゲストOS全体を起動しないため、仮想マシンより起動が速く、メモリやディスクの負担も小さくなります。

仮想マシンが建物ごと別に建てる方式なら、コンテナは建物の中に入口と部屋を分けて入居させる方式です。部屋は独立して見えますが、建物の基礎にあたるカーネルは共有します。

なぜ必要か

開発環境では、コードだけでなくライブラリの版やOSパッケージまで揃わないと同じ動作になりません。イメージにアプリケーションと依存関係をまとめれば、構成を再利用できます。

一方、仮想マシンはゲストOSまで分離するため、異なるカーネルやより強い隔離が必要な場合に向きます。コンテナは軽量さと起動速度を得る代わりに、分離の強度はVMより弱いという交換条件です。

揃える対象コンテナで扱う場所揃わないと起きること
アプリとライブラリイメージ依存関係の版違いで動作が変わる
カーネルホストイメージだけ交換してもOSの前提は変わらない
デバイス接続実行時のランタイム設定GPUなどの資源がコンテナから見えない

仕組み

イメージは読み取り専用のファイルシステム差分を重ねたもので、起動時に書き込み可能な層を加えます。実行時の変更は各コンテナ側に閉じ込められ、依存関係を含められることが再現性に効きます。

Linuxでは、プロセスから見えるIDやネットワークを分ける仕組みと、CPU・メモリを制限する仕組みを組み合わせます。別カーネルを起動しないため、ホストとの互換性が前提です。

GPUは、コンテナに入れただけでは利用できません。ホスト側のドライバとランタイムの橋渡しが必要です。NVIDIA Container RuntimeはOCI仕様に対応するGPU対応ランタイムで、DockerやCRI-OなどからGPUをコンテナ内へ公開します。CUDA関連ファイルをイメージに入れるだけでなく、実行時の統合まで設計します。

実行環境=イメージ+ホストカーネル+ランタイム設定\text{実行環境} = \text{イメージ} + \text{ホストカーネル} + \text{ランタイム設定}

イメージはアプリと依存関係、ホストカーネルは共有されるOSの中核、ランタイム設定は実行時の接続を表します。

試験でどう問われるか

問われ方正解に寄る条件引っかけ
VMとの違いコンテナはカーネル共有、VMはゲストOSを含むコンテナもゲストOSを1台ずつ起動する
軽量・高速な理由OS全体を起動せず、ホストのカーネルを使う分離が強いから速い
再現性の説明イメージにアプリと依存関係をまとめる起動するたびに最新パッケージを取得する
GPU利用の条件GPU対応ランタイムなど、ホストとコンテナの接続が要るイメージを作ればGPUが見える
隔離の強さ軽量さと引き換えにVMより弱いコンテナはVMと同じセキュリティ境界

実装で確かめる

GPU処理では、イメージ内の依存関係とは別に、ホスト側のドライバ、ランタイム、デバイス公開設定が要ります。

イメージにGPU用ライブラリが入っていることと、コンテナからGPUデバイスが見えることは別です。前者だけを確認して「GPU対応済み」と判定すると、環境によって起動時に失敗します。

取り違えやすいもの

用語コンテナ型仮想化との切り分け
仮想マシンゲストOSと別カーネルを含めて動かす。分離は強いが負担が大きい
コンテナイメージ実行方式ではなく、アプリと依存関係を配布する成果物
コンテナランタイムイメージを実際のプロセスとして起動し、必要な資源やデバイスを接続する層
GPU対応ランタイム通常の起動に加えて、ホストGPUをコンテナ内へ公開するための仕組み
サンドボックス隔離を目的とする広い概念。コンテナと同じ強度・実装とは限らない

想起チェック

コンテナがVMより軽く起動できる主因は何か

ゲストOS全体を起動せず、ホストのカーネルを共有するためです。

イメージが再現性に効く理由は何か

アプリケーションだけでなく、必要な依存関係を同じ配布単位に固めて再利用できるためです。

GPUを使うとき、イメージ以外に何を確認するか

ホスト側のドライバと、GPUをコンテナへ公開する対応ランタイムおよび実行時設定です。

出典