ソフトウェア
上級

Linux Namespaces (PID/Net/Mount/UTS/IPC/User/Cgroup)(リナックスネームスペース)

Linux カーネルのプロセス分離機構。7種類 (Mount/PID/Network/UTS/IPC/User/Cgroup) で資源を別空間に隔離、コンテナ技術 (Docker/LXC/Podman) の基盤。

0 回閲覧
0 いいね
2026/5/15 更新
関連タグ
Linux
Kernel
Namespace
Container

概要

Linux Namespaces はLinux カーネルのプロセス分離機構で、特定のプロセスツリーだけを別の「名前空間」(Mount / Network / PID 等) に隔離する仕組み。2002年Linux 2.4.19 でMount namespace 初導入・Linux 3.8 (2013) でUser namespace 完了し計7種類が揃う。cgroups (資源制限) と共にコンテナ技術 (Docker / LXC / Podman / Kubernetes) の二大基盤技術。

7 種類のNamespace

種類略隔離対象導入Linux
Mountmntマウントポイント2.4.19 (2002)
UTSutsホスト名 / ドメイン名2.6.19 (2006)
IPCipcSysV IPC / POSIX message queue2.6.19 (2006)
PIDpidプロセスID2.6.24 (2008)
Networknetネットワーク (IF / routing / firewall)2.6.29 (2009)
UseruserユーザID / グループID3.8 (2013)
Cgroupcgroupcgroup ルートビュー4.6 (2016)
Timetimeブート時刻 / monotonic clock5.6 (2020)

主要namespace の効果

Mount namespace

各 namespace で独立した /proc / /sys / /tmp 等のマウントツリーを持つ。Docker コンテナが自前のファイルシステム (overlayfs / volume) を見るのに不可欠。

PID namespace

PID 1 から始まる独立プロセス空間。コンテナ内で ps 実行すると親OS のプロセスは見えず、コンテナ内プロセスのみ。

Network namespace

独立したNIC / IP / Routing Table / iptables / sysctl。Docker bridge / veth pair でコンテナにIP割当、host とは別空間。

User namespace

UID / GID リマッピング・コンテナ内 root (UID 0) が外部では非特権ユーザ。Rootless Docker / Podman の基盤。

unshare コマンド

# 新しい namespace 作成 + コマンド実行
unshare --pid --fork --mount-proc /bin/bash
# → 別の PID namespace に入り、ps が新空間のみ表示

unshare --net --uts /bin/bash
# → 別Network / Hostname 空間

Docker 内部での利用

# Docker run 内部で
docker run -it ubuntu bash
# 内部的に:
# clone(CLONE_NEWPID | CLONE_NEWNET | CLONE_NEWNS | CLONE_NEWIPC | CLONE_NEWUTS | CLONE_NEWUSER, ...)
# → 全namespace 隔離 + cgroup 制限 + overlayfs マウント

/proc/[pid]/ns/

各プロセスの namespace への symlink。bind mount で永続化可能:

ls -l /proc/$$/ns/
# cgroup -> 'cgroup:[4026531835]'
# ipc -> 'ipc:[4026531839]'
# mnt -> 'mnt:[4026531841]'
# net -> 'net:[4026531840]'
# pid -> 'pid:[4026531836]'
# user -> 'user:[4026531837]'
# uts -> 'uts:[4026531838]'

関連用語との違い

  • vs chroot: 軽量 (chroot Mount のみ) / 多次元 (Namespaces)
  • vs Solaris Zones / FreeBSD jails: 類似コンセプト
  • vs cgroups: 隔離 (Namespaces) / 資源制限 (cgroups)
  • vs Hypervisor (KVM): プロセス分離 / VM分離

FAQ

Q1: 一般ユーザに影響? A: 直接設定機会少ないが、Docker / Snap / Flatpak / Firejail 等で間接利用。User namespace 経由でrootless 動作可能。

Q2: Rootless Docker? A: User namespace で非rootユーザがUID 0 (コンテナ内 root) になれる仕組み。Podman 標準・Docker 20.10+ オプション。

Q3: Time namespace の用途? A: コンテナ毎に独立した時刻システム (CLOCK_BOOTTIME / CLOCK_MONOTONIC)。チェックポイント / マイグレーションで時刻整合性確保。

この記事について
カテゴリーソフトウェア
難易度上級
作成日2026/5/15