ひとことで言うと
コンテナ型仮想化は、ホストOSのカーネルを共有しながら、プロセス、ファイルシステム、ネットワークなどの見える範囲を分離してアプリケーションを動かす方式です。ゲストOS全体を起動しないため、仮想マシンより起動が速く、メモリやディスクの負担も小さくなります。
仮想マシンが建物ごと別に建てる方式なら、コンテナは建物の中に入口と部屋を分けて入居させる方式です。部屋は独立して見えますが、建物の基礎にあたるカーネルは共有します。
なぜ必要か
開発環境では、コードだけでなくライブラリの版やOSパッケージまで揃わないと同じ動作になりません。イメージにアプリケーションと依存関係をまとめれば、構成を再利用できます。
一方、仮想マシンはゲストOSまで分離するため、異なるカーネルやより強い隔離が必要な場合に向きます。コンテナは軽量さと起動速度を得る代わりに、分離の強度はVMより弱いという交換条件です。
| 揃える対象 | コンテナで扱う場所 | 揃わないと起きること |
|---|---|---|
| アプリとライブラリ | イメージ | 依存関係の版違いで動作が変わる |
| カーネル | ホスト | イメージだけ交換してもOSの前提は変わらない |
| デバイス接続 | 実行時のランタイム設定 | GPUなどの資源がコンテナから見えない |
仕組み
イメージは読み取り専用のファイルシステム差分を重ねたもので、起動時に書き込み可能な層を加えます。実行時の変更は各コンテナ側に閉じ込められ、依存関係を含められることが再現性に効きます。
Linuxでは、プロセスから見えるIDやネットワークを分ける仕組みと、CPU・メモリを制限する仕組みを組み合わせます。別カーネルを起動しないため、ホストとの互換性が前提です。
GPUは、コンテナに入れただけでは利用できません。ホスト側のドライバとランタイムの橋渡しが必要です。NVIDIA Container RuntimeはOCI仕様に対応するGPU対応ランタイムで、DockerやCRI-OなどからGPUをコンテナ内へ公開します。CUDA関連ファイルをイメージに入れるだけでなく、実行時の統合まで設計します。
イメージはアプリと依存関係、ホストカーネルは共有されるOSの中核、ランタイム設定は実行時の接続を表します。
試験でどう問われるか
| 問われ方 | 正解に寄る条件 | 引っかけ |
|---|---|---|
| VMとの違い | コンテナはカーネル共有、VMはゲストOSを含む | コンテナもゲストOSを1台ずつ起動する |
| 軽量・高速な理由 | OS全体を起動せず、ホストのカーネルを使う | 分離が強いから速い |
| 再現性の説明 | イメージにアプリと依存関係をまとめる | 起動するたびに最新パッケージを取得する |
| GPU利用の条件 | GPU対応ランタイムなど、ホストとコンテナの接続が要る | イメージを作ればGPUが見える |
| 隔離の強さ | 軽量さと引き換えにVMより弱い | コンテナはVMと同じセキュリティ境界 |
実装で確かめる
GPU処理では、イメージ内の依存関係とは別に、ホスト側のドライバ、ランタイム、デバイス公開設定が要ります。
イメージにGPU用ライブラリが入っていることと、コンテナからGPUデバイスが見えることは別です。前者だけを確認して「GPU対応済み」と判定すると、環境によって起動時に失敗します。
取り違えやすいもの
| 用語 | コンテナ型仮想化との切り分け |
|---|---|
| 仮想マシン | ゲストOSと別カーネルを含めて動かす。分離は強いが負担が大きい |
| コンテナイメージ | 実行方式ではなく、アプリと依存関係を配布する成果物 |
| コンテナランタイム | イメージを実際のプロセスとして起動し、必要な資源やデバイスを接続する層 |
| GPU対応ランタイム | 通常の起動に加えて、ホストGPUをコンテナ内へ公開するための仕組み |
| サンドボックス | 隔離を目的とする広い概念。コンテナと同じ強度・実装とは限らない |
想起チェック
コンテナがVMより軽く起動できる主因は何か
ゲストOS全体を起動せず、ホストのカーネルを共有するためです。
イメージが再現性に効く理由は何か
アプリケーションだけでなく、必要な依存関係を同じ配布単位に固めて再利用できるためです。
GPUを使うとき、イメージ以外に何を確認するか
ホスト側のドライバと、GPUをコンテナへ公開する対応ランタイムおよび実行時設定です。