Dock Stay
Linux Namespaces: 見える世界を分ける
はじめに

Linux Namespaces: 見える世界を分ける

コンテナ隔離の中核、Linux Namespaces の 7 種類(PID / Mount / Network / UTS / IPC / User / cgroup)と、ホスト上で確認する方法。

7 種類の Namespace

コンテナの隔離の中核が Linux Namespaces です。

プロセスごとに「見える世界」を切り替える仕組みで、現在 7 種類あります。

Namespace 何を隔離するか
PID プロセス ID。コンテナ内の PID 1 はホストでは別の PID
Mount マウントポイント。コンテナのルート / はホストのサブツリー
Network ネットワークインターフェース・ルーティング・ポート
UTS ホスト名・ドメイン名
IPC 共有メモリ・セマフォ
User UID / GID のマッピング(rootless の鍵)
cgroup cgroup 階層の見え方

どれか 1 つが欠けるとホストとコンテナの境界に穴が空きます。

ホストから namespace を見る

lsns コマンドでホスト上の namespace を一覧できます。

特定のプロセスがどの namespace に属しているかは /proc/<pid>/ns/ 配下のシンボリックリンクで確認できます。

コンテナを起動した瞬間に新しい PID・Mount・Network などの namespace が作成され、エントリープロセスがそこに入れられます。

ホスト側から見ると、コンテナのエントリープロセスは通常の PID を持つ 1 プロセスですが、/proc/<pid>/ns/pid がホストと異なる inode を指します。

bash
# ホスト上の namespace を一覧する
lsns

# 特定プロセスが属する namespace を見る
ls -l /proc/$(pgrep -n nginx)/ns/

関連トピック