Dev Study
← コンピュータの基礎

仮想化とコンテナ隔離の原理

6 カテゴリ・60

仮想化I(ハイパーバイザとハードウェア支援)

10

VMが成り立つ命令レベルの仕組みを学びます。特権命令のトラップとエミュレート、Popek-Goldbergの要件、Intel VT-x/AMD-Vによるハードウェア支援仮想化、準仮想化との違いを、なぜそれで隔離できるのかという原理から理解します。

仮想化II(メモリとI/Oの仮想化)

10

VMのメモリとデバイスがどう隔離されるかを、機構の実装から理解します。ゲスト物理アドレスをホスト物理アドレスへ変換する二段階変換(EPT/NPT)、I/Oを速くするvirtio、デバイスのDMAを閉じ込めるIOMMUという3つの土台に絞って学びます。「なぜその仕組みだと安全に速く隔離できるのか」を問います。

仮想化III(Linux名前空間)

10

コンテナ隔離の核その1、Linuxの名前空間(namespace)を土台から。プロセスごとにグローバル資源の見え方を分ける仕組み、pid/net/mnt/user など各種類が何を隔離するか、clone/unshare/setns での作り方、PID1の特別扱い、そしてカーネルは1つを共有する点(VMとの決定的な違い)まで、なぜ隔離できるのかを一次ソース(namespaces(7)など)で確認します。

仮想化IV(cgroupによる資源制御)

10

コンテナ隔離のもう一つの柱、cgroup(control group)を扱います。名前空間が「見え方」を隔離するのに対し、cgroupはCPU・メモリ・I/O・プロセス数といった「資源の量」をプロセスのツリーに対して制限する仕組みです。cgroups(7)とカーネル公式のcgroup-v2文書を一次ソースに、v1とv2の違いや各コントローラの動作を仕組みから確認します。

仮想化V(コンテナランタイムとOCI)

10

コンテナを実際に起動する層を扱います。コンテナがnamespace・cgroup・capability・seccomp・rootfs切替を組み合わせた普通のLinuxプロセスであること、OCI仕様が定めるランタイムの契約、そしてcontainerd/CRI-O(高レベル)とrunc(低レベル)の役割分担を、一次ソースであるOCI runtime-specとman-pagesを土台に理解します。「なぜその機構で隔離できるのか」に焦点を当てます。

仮想化VI(イメージ層と隔離の限界)

10

コンテナイメージが読み取り専用レイヤの積み重ね(overlayfs)でできている仕組みと、そのコピーオンライトやレイヤ共有のからくりを、カーネル公式文書に沿って学びます。あわせて「コンテナはホストのカーネルを共有するから隔離が弱い」理由と、gVisorやKata・rootless・特権コンテナといった境界を強める(あるいは壊す)技術を、なぜそう効くのかという原理から押さえます。