回覆列表
  • 1 # 穹下一花樹

    它透過將名稱空間劃分為下面的幾種型別,並且每項namespace都具有一個唯一標識來對資源實現隔離。

    如果兩個程序指向的同一個namespace,則表示它們同在該 namespace下。

    linux名稱空間型別劃分:

    1. UTS namespace: 提供了 hostname 和 domain 的隔離。這樣每個容器就擁有獨立的主機名和域名了,在網路上就可以被視為一個獨立的節點,在容器中對 hostname 的命名不會對宿主機造成任何影響。

    2. PID namespace :完成的是程序號的隔離,保證了容器的 init 程序是以 1 號程序來啟動的。

    3. IPC namespace: 實現了程序間通訊的隔離,包括常見的幾種程序間通訊機制,例如:訊號量,訊息佇列和共享記憶體。我們知道,要完成 IPC,需要申請一個全域性唯一的識別符號,即 IPC 識別符號,所以 IPC 資源隔離主要完成的就是隔離 IPC 識別符號。

    4. Mount namespace: 透過隔離檔案系統的掛載點來達到對檔案系統的隔離。保證了容器看到的檔案系統的檢視,是容器映象提供的一個檔案系統,也就是說它看不見宿主機上的其它檔案,除了透過 -v 引數 bound 的那種模式,是可以把宿主機上面的一些目錄和檔案,讓它在容器裡面可見的;

    5. Network namespace :實現了作業系統層面的網路資源隔離,包括網路裝置介面、IPv4 和 IPv6 協議棧,IP 路由表,防火牆,/proc/net 目錄,/sys/class/net 目錄,Sockets 套接字等資源。同一個網路裝置只能位於一個 Network namespace 中,不同 namespace 中的網路裝置可以利用 veth pair 進行橋接。

    6. User namespace :主要隔離了安全相關的識別符號和屬性,包括 User ID、User Group ID、root 目錄、key 以及特殊許可權。

    實際上,還有第 7 個是 cgroup namespace。Docker 中用到了前六種,第 7 種 cgroup namespace 在 Docker 本身並沒有用到,但是在 runC 實現中實現了cgroup namespace。用 cgroup namespace 帶來的一個好處是容器中看到的 cgroup 檢視是以根的形式來呈現的,這樣的話就和宿主機上面程序看到的 cgroup namespace 的一個檢視方式是相同的,另外一個好處是讓容器內部使用cgroup。

  • 中秋節和大豐收的關聯?
  • 長到二十歲見舅舅都不到二十次,過年了讓打電話,不知道該說什麼,各位幫幫忙,告訴我一下?