不用root許可權也能執行Docker——細數Docker 1.10的新功能

精靈雲發表於2016-05-03

本文來源:Ghostcloud翻譯

Docker 1.10增加了新功能,從這個版本以後,使用者在Linux上跑Docker時都不必再以root許可權執行了。

 

作為容器化產品家族的最新成員,Docker 1.10解決了長期以來一直困擾Docker的一個重大問題。

 

到目前為止,所有容器都只能在Docker daemon下以root許可權執行,而且各種潛在的安全問題多得要命,看得人頭皮發麻。針對這一問題,Docker 1.10推出了使用者名稱空間功能。其實該功能在1.9版本中已經有了,不過那時還處在嘗試階段,到1.10版以後才正式面向廣大使用者開放這個功能,當然,1.10版在其他方面也做了改進。下面我們就來看看Docker 1.10都有哪些新亮點。

 

安全的名稱空間

透過名稱空間,Docker 1.10將Docker daemon和容器區別開來,對二者的許可權分別加以處理,同時為各個容器分配相應的許可權等級。在1.10下,Docker daemon仍然要取得主機的root許可權,但容器就可以不用了。

 

不過,使用者名稱空間功能目前還只能在Linux平臺上使用,Docker安全部門總監Nathan McCauley也承認這一點。Nathan表示將來Docker會把Windows自有的隔離機制整合到Docker中,而且Docker會實現對所有平臺隔離機制的支援。

 

作為對使用者名稱空間的補充,Docker還為提供了外掛機制以滿足使用者在授權方面的需求。管理員可以針對自身所在的機構制定相應規則,Docker會按照這些規則來處理機構內部使用者的訪問許可權。此外,Docker也可以依照設定好的規則來處理各個容器傳送的系統呼叫請求(包括允許呼叫、禁止呼叫和跟蹤監測三種模式)。

 

在之前的版本中,由於Docker只能以root許可權執行,所以執行Docker總是會遇到大量的潛在安全問題,這一問題給Docker造成了長期的困擾。對此很多人都頗有微詞,比如說CoreOS就一直在個問題上強烈抨擊Docker,而且CoreOS還推出了rkt container runtime 1.0,在該版本下,容器不必取得root許可權也可以執行。(在rkt環境下可以直接執行Docker容器。)

 

其實Docker早就意識到讓容器以root許可權執行會造成很多問題,為了彌補這個缺陷,Docker花費了大量的精力,研發出了名稱空間機制,並先後經歷了好幾次修改才最終推出1.10這個穩定版本。目前CoreOS旗下的rkt也可以支援該功能,不過還處在嘗試階段。

 

對網路功能的重構

除了名稱空間以外,Docker 1.10在另外兩個問題上也有很大的改進。其中一個是Docker Compose,Docker Compose是Docker的原生容器管理工具,透過它使用者就可以在主機上建立多個容器。在Docker 1.10中Docker Compose採用了新的定義規則,可以透過多種方式對容器之間的網路連線加以設定,而Docker的網路連線子系統也為這項功能提供了支援。在建立包含多個容器的應用時,新版的Docker Compose可以大大減少我們的工作量,令主機和容器的設定變得更為簡單。

 

此外,Docker的網路效能也得到了改善。1.10版本為Docker daemon設定了專門的DNS客戶端,這樣,Docker就可以自動完成容器發現功能,不用再像以前一樣靠/etc/hosts命令來執行發現功能。如有必要,使用者也可以向外部伺服器傳送DNS查詢請求。

 

同時,Docker 1.10還針對內網環境提供了一項新功能,使用者可以透過該功能對容器之間的網路通訊加以限定,只需輸入一行命令,即可將所有容器的通訊範圍都限定在使用者私有的子網域內。

 

Docker 1.10還引入了第三方解決方案,一舉搞定了另外一個長期存在的問題——網路連線問題。Docker對這次的改進非常看好,還放出豪言稱新版的網路拓撲功能無需經過任何改動即可用來開發基於Docker的應用,還可以直接部署在產品環境中。在以前,Docker因為一直沿用老舊的網路模型而頗受侷限,在這一點上沒少遭人詬病,隨著1.10版的推出,這種尷尬的局面也徹底終結了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31126106/viewspace-2092815/,如需轉載,請註明出處,否則將追究法律責任。

相關文章