天天看點

Docker container與宿主程序互相隔離的實作原理

我們都知道在Docker container裡運作ps指令是看不到主控端上運作的程序的。這種程度的隔離是通過什麼方式實作的呢?

答案是Linux内部指令unshare。

我第一次執行指令unshare /bin/bash,然後再執行ps -ef --forest,發現通過unshare指令fork的新的程序裡,因為其pid和父程序pid的namespace相同,是以ps -ef的結果和在父程序上執行相同。

Docker container與宿主程式互相隔離的實作原理

下面我還是執行unshare,不過加上參數:

unshare --pid --mount-proc --fork /bin/bash

Docker container與宿主程式互相隔離的實作原理
Docker container與宿主程式互相隔離的實作原理

這樣從namespace級别進行了父程序和fork出的子程序的隔離。現在我在子程序裡再執行ps -ef --forest, 從結果能發現确實隻能看到子程序本身的bash和ps程序了。

Docker container與宿主程式互相隔離的實作原理