MyUtils

View on GitHub

Linuxのnamespaceについて

コンテナの中核にはlinuxネームスペースが使われる。 この機能によってプロセスの集合毎にリソースを分離することができる。 コンテナ毎に異なるファイルシステムをマウントしたり、コンテナ内から外のプロセスが見えなかったりといった具合。

以下のネームスペース機能がサポートされている。

ネームスペース 使い方
マウント ファイルシステムの分離。マウント/アンマウントでネームスペース外のシステムに影響しなくなる
UTS(Unix Time shareing) hostnameやdomain nameの分離
IPC System V IPCオブジェクト,POSIX message queueを分離
ネットワーク IP/ルーティング等を分離
PID プロセスIDの集合を分離。PIDネームスペース内で作成されるプロセスから外のプロセスは見えず。また、他とPIDを共有しないので1から振りなおされる。
Control Group(cgroup) cgroupを分離。ネストされたコンテナに使える
ユーザ ユーザID,グループID,ケーパビリティの分離
Time CLOCK_MONOTONIC,CLOCK_BOOTTIMEの分離

PID/マウントネームスペースを作成する

こんな感じでunshareコマンドでネームスペースを作成できる。 --pidでPIDネームスペースを、--mountでマウントネームスペースが作成できる。

# bashがPID 1で実行される。
sudo unshare --pid --mount --fork /bin/bash

# procfsを/procにマウントし直すことができるのは、--mountネームスペースのおかげ
mount -t proc procfs /proc