名前空間は、それぞれが独立した名前空間のリソースを持っているように、パッケージを実行するグローバルリソースの中核であるので、それぞれの名前空間内のさまざまなプロセスがリソースの同じ種類を使用するように互いに干渉しません。
Linuxカーネルは、現在、次の6つの名前空間の合計をサポートしています。
- IPC:分離System VのIPCおよびPOSIXメッセージキュー。
- ネットワーク:ネットワークリソースの分離。
- マウント:ファイルシステムのマウントポイントを検疫します。
- PID:分離プロセスID。
- UTS:分離ホストとドメイン名。
- ユーザー:ユーザーIDとスペーサーグループID。
Linuxは主にクローン、setnsと完全に共有を解除これらの3つのシステムコールを介し、名前空間のために動作し、そしてクローンは、新しいプロセスを作成するときに、これらのフラグを含む呼を受信するパラメータフラグ、CLONE_NEWNS、CLONE_NEWIPC、CLONE_NEWUTS、CLONE_NEWNET(Mount namespace)、CLONE_NEWPID
およびCLONE_NEWUSER
新しい名前空間を作成するため、このクローン新しいプロセスを作成した後、それは新しい名前空間、および同じ名前空間に属し、デフォルトで作成された新しいプロセスのフォローアップのプロセスに属しています。
あなたは、共有解除機能(で、新しい名前空間を設定し、既存のプロセスにしたい場合はlong unshare(unsigned long flags)
、新しい名前空間を表す基準フラグである一式)、。あなたはプロセスがすでに(setns機能によって、存在する中で、名前空間がすでに存在して設定したい場合はint setns(int fd, int nstype)
最後まで)、それに関連する名前空間情報は、procfsのディレクトリに格納された各プロセスは、あなたがsetnsによって設定することができ、すでに存在していな名前空間を見つけることができます:
[root@centos ~]# ls -l /proc/10401/ns
总用量 0
lrwxrwxrwx 1 root root 0 1月 12 11:36 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 1月 12 11:36 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 1月 12 11:36 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 1月 12 11:36 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 1月 12 11:36 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 1月 12 11:36 uts -> uts:[4026531838]
上記仮想ファイルは、名前空間ここで処理しなければならないのそれぞれ、他のプロセスが、ネームスペースを入力し、ファイルを開く仮想FDを取得するために、その後、FD setns関数のパラメータに渡されたい場合は、nstypeに仮想ファイルの種類と対応するように注意を払うことができます。
Linuxカーネルは、現在、次の6つの名前空間、すなわちIPC、ネットワーク、マウント、PID、UTS、ユーザーの合計をサポートしています:
IPC
IPCは、プロセス間通信であり、はSystemV IPCおよびPOSIXメッセージキューのIPC名前空間が、その識別子によって表されるなどソケット、共有メモリ、メッセージキュー、およびPOSIXはSystemV IPCとしてLinuxでのプロセス間通信、種々の、あります異なるメッセージ・キューは、通信は、プロセス間の対応するメッセージキュー識別子を見つけることによって達成され、実行するIPC名前空間が異なる名前空間に異なるメッセージ・キューに対応する同一の識別子であるため、異なる名前空間は、プロセス間通信の処理を完了することができません。
通信網
ネットワークリソースのネットワーク名前空間の分離は、ネットワーク名前空間は、それぞれが独自のネットワーク機器、IPアドレス、ルーティングテーブル、/ procの/ netディレクトリ、およびポート番号を持っています。ネットワーク名前空間の各ループバック・デバイスを(加えて、他のネットワークデバイスを持っていないために)有します。だから、ユーザーがここで独自のネットワーク設定を行う必要があります。IPツールは、すでにネットワークネーム、名前空間はそれを介して、新たなネットワークとして機能するようにネットワークを構成することができますサポートしています。
マウント
マウントポイントな名前空間ユーザ検疫ファイルシステムをマウントし、各プロセスは、ファイルシステムに見ることができるが記録され/proc/$$/mounts
ています。新しいマウント名前空間を作成した後、システムは、ファイルシステムのマウント処理/アンマウントアクションは、他の名前空間には影響しません。
PID
PIDネームスペースは再び同じになるプロセスのPID数のプロセスPID番号、このように、異なる名前空間を単離するために使用されます。あなたはPID名前空間を作成すると、PID番号の最初のプロセスはinitプロセスである、1です。初期化プロセスは、initプロセスなど、いくつかの特別な機能は、孤立したプロセスを必要なすべてのリソースをリサイクルするための責任があります。また、送信者は、「キル」コンテナ内のinitプロセスではありませんSIGKILL信号であるとしても、それはブロックされますinitプロセスに任意のシグナルを送ります。
なお、しかし、あなたはpsコマンドのプロセスとシステムを表示するとき、あなたが実際にホストのすべてのプロセスを見ることができるでしょう。
psコマンドでのprocfsから情報を読み取ることがあるので、これはですが、procfsのは単離されていません。これらのプロセスは見ることができますが、それは実際には別のPID名前空間である、と彼らはあるので、したがって、これらのプロセスにシグナルを送信することはできません。
UTS
ノード名とドメイン名これらの二つのフィールドは、UTSの名前はここから派生したシステムコールのuname構造structutsnameで使用されているホスト名とドメインの分離のためのUTS名前空間。なぜ我々は、ホスト名がホスト名でマシンにアクセスするために、ローカルエリアネットワークとして、IPアドレスの代わりに使用することができますので、それは、UTS名前空間が必要です。
ユーザー
ユーザネームは、例えば、それは異なるものとすることができるホストにIDを持つユーザとグループIDのネームスペースの処理と分離株ユーザーリソースに使用され、これを行うことができ、一般ユーザのホストは、容器(ユーザの名前空間)を持っていることができますroot権限が、権限は、コンテナ内で定義されています。(このようなコンテナのルートとして、実際には、この特権操作は、他のコンテナまたはホストに影響を与えることが許可されません基本的にあれば、まだ多くの特権操作を実行できませんがあります)
概要
一般的な名前空間と組み合わせcgroup内で使用されているが、直接操作ではない非常に簡単な名前空間とのcgroupので、そこのドッキングウィンドウには、基礎となるLibcontainerによってこれらの事に対処するために、ドッカー必要です。その結果、ドッカーは、単にAPIのLibcontainerを呼び出して、フルコンテナを構築することができるようになります。ユーザードッカーのとおり、いないこれらの事についても、心配を行い、そして唯一ドッカー2つの簡単なコマンドでコンテナを起動する必要があります。