核心命名空間
Docker 容器和 LXC 容器很相似,所提供的安全內容屬性也差不多。當用 docker run
啟動一個容器時,在後台 Docker 為容器建立了一個獨立的命名空間和控制組集合。
命名空間提供了最基礎也是最直接的隔離,在容器中執行的處理序不會被執行在主電腦上的處理序和其它容器發現和作用。
每個容器都有自己獨有的網路堆疊,意味著它們無法存取其它容器的 sockets 或介面。不過,如果主電腦系統上做了相應的設定,容器可以像跟主電腦互動一樣的和其它容器互動。當指定公共連接埠或使用 links 來連線 2 個容器時,容器就可以相互通信了(可以根據設定來限制通信的原則)。
從網路架構的角度來看,所有的容器透過本地主電腦的橋接器介面相互通信,就像物理機器透過物理交換機通信一樣。
那麼,核心中實作命名空間和私有網路的程式碼是否足夠成熟?
核心命名空間從 2.6.15 版本(2008 年 7 月發佈)之後被引入,數年間,這些機制的可靠性在諸多大型生產系統中被實踐驗證。
實際上,命名空間的想法和設計提出的時間要更早,最初是為了在核心中引入一種機制來實作 OpenVZ 的內容屬性。 而 OpenVZ 項目早在 2005 年就發佈了,其設計和實作都已經十分成熟。