名前空間(Linux)
プロセス群に、独自のプロセスID、ネットワーク、ファイルシステムなど、隔離されたシステムの見え方を与えるLinuxカーネルの仕組み。コンテナが「自分だけがマシンにいる」と思い込むのはこのおかげだ。cgroupsと並ぶコンテナの二本柱の一つ。
カーネルは複数種類の名前空間をサポートし、それぞれがシステムの一側面を隔離する。PID(独自のプロセスID。ホストのプロセスは見えない)、NET(独自のネットワークスタックとインターフェース/IP)、MNT(独自のファイルシステム/マウント)、UTS(独自のホスト名)、IPC(独自の共有メモリ/キュー)、USER(独自のUIDマッピング。rootlessの基盤)だ。コンテナとは、独自の名前空間群の中で動き、cgroupsで制限されたプロセスにほかならない。利点は、仮想マシン一式を用意せずに軽量な隔離ができること(カーネルを共有するので起動も速い)。限界は、カーネルを共有するため隔離が仮想マシンより弱いこと。信頼できないコードを動かす場面でgVisorやKataが使われるのはそのためだ。名前空間(何が見えるか)とcgroups(どれだけ使えるか)の組み合わせこそがコンテナである。