久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Docker內核技術原理之Namespace

Docker的空間隔離使用的是namespace(空間),它是內核提供的一種空間隔離,在一個空間下,每個進程看到的視圖是一致的,相應的如果不在一個空間下看到資源視圖是不一致的,舉個例子,如果兩個進程在同一個網絡命令空間下,那么他們看到的網絡信息(網卡、IP、路由等)是一樣的,可以通過localhost的方式互相訪問。常用的有6種namespace,在Linux 內核4.6之后又添加了Cgroup這namespace,5.6 之后又添加了時鐘namespace。

Docker內核技術原理之Namespace

這里有個小細節,上面表格創建Mount Namespace的系統調用參數是CLONE_NEWNS,而不是CLONE_NEWMOUNT。從字面理解是創建一個命名空間的意思,這是由于歷史原因導致的,因為Mount Namespace是第一個namespace,內核的開發者可能也沒有預料到后續還有其它的namespace的加入,所以就先把CLONE_NEWNS給占用了。

可見,namespace的隔離其實并不充分,除了上面的隔離能力,其他的都一樣。譬如,時鐘在內核5.6版本之前,所有容器和操作系統都共享同一個時鐘,如果修改了操作系統的時間,所有容器都時間都會變化。

Docker內核技術原理之Namespace

namespace實現原理也非常簡單,每個進程(task_struct)都有一個關于namespace的屬性nsproxy,表示自己所屬的namespace。

Docker內核技術原理之Namespace

其中的nsproxy就是指向各種namespace的一個代理。如下所示:

Docker內核技術原理之Namespace

當新進程被創建后會繼承其父進程的namespace,這就是為啥一個容器里面的所有進程都共享namespace。在Linux集群上面,通過讀取“/proc/進程ID/ns/”下的文件可以獲取到每個進程對應的namespace。

Docker內核技術原理之Namespace
文章轉載:https://os.51cto.com/art/202107/671347.htm

(版權歸原作者所有,侵刪)

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

  • <menu id="dlktz"></menu>
    <ul id="dlktz"></ul>
    <menu id="dlktz"></menu>
    <bdo id="dlktz"></bdo>
    主站蜘蛛池模板: 大宁县| 鄄城县| 娄烦县| 巩义市| 石阡县| 桦川县| 汝阳县| 波密县| 集安市| 南安市| 密云县| 巴楚县| 托克逊县| 娱乐| 祥云县| 县级市| 镇远县| 沈丘县| 乐亭县| 北碚区| 寿阳县| 淮阳县| 永昌县| 临湘市| 高陵县| 龙游县| 灵宝市| 南丹县| 册亨县| 神木县| 留坝县| 武威市| 建水县| 曲松县| 荣昌县| 卢湾区| 岑巩县| 津南区| 保靖县| 子长县| 海城市|