不用root權限也能運行Docker——細數Docker 1.10的新功能

本文來源: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.10Docker 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 ComposeDocker ComposeDocker的原生容器管理工具,通過它用戶就可以在主機上創建多個容器。在Docker 1.10Docker 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版的推出,這種尷尬的局面也徹底終結了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章