Docker 架構優缺點大剖析

2021-08-19 13:21:39 字數 3227 閱讀 8312

在docker問世後,其打包應用程式、快速部署的能耐,受到開發者的廣大歡迎。在2023年,docker進一步推出私有儲存庫功能docker registry,以及原生網路功能docker networking,讓企業更容易自行架構docker集群。這些都讓docker逐漸成為正式環境的新選擇。

在docker受到一片好評下,著有《docker原始碼分析》,大受到中國docker社群好評的孫巨集亮認為,docker至少有3大缺點,還無法滿足各種環境的需求。深入研究docker原始碼的他,也是中國docker paas服務商daocloud參與第一線開發的軟體工程師。

別於多數docker開發者從應用程式面切入談論docker的角度,孫巨集亮在2015 container summit上,則是選擇從docker的程式碼設計架構,來剖析優缺點。

孫巨集亮也指出,container技術雖然已經發展許久,但是透過docker獨特的映像檔設計,才使container技術在近年發揚光大。

獨特映像檔設計讓docker爆紅

container技術最早可以追溯至2023年時推出的unix v7,其中的chroot系統呼叫指令,透過更改程式的根目錄,達到系統程式隔離的效果。而發展已經超過30年的container技術,為何遲至2023年才因為docker橫掃全球it業界,孫巨集亮解釋,因為docker映像檔的設計,使得docker得以打破過去「程式碼即應用」的觀念。

傳統上認為,軟體開發結束後,所產出的成果即是程式碼,或是能夠編譯執行的二元執行檔。

而為了讓這些程式碼可以順利執行,開發團隊也得準備完整的部署檔案,讓維運團隊得以部署應用程式,不過,即便如此,仍然常常發生部署失敗的狀況。孫巨集亮表示,docker透過映像檔,將作業系統核心外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平台間的無縫接軌運作。

而微軟已經宣布,將在下一代的windows server 2016中內建docker engine,使得windows sever可以原生支援docker。但孫巨集亮也解釋,目前windows對docker的支援,多數還是在api層。除了windows作業系統與linux在kernel層差異很大外,windows也有發展有自家的container技術。

docker映像檔的設計,使得docker得以打破過去「程式碼即應用」的觀念。透過映像檔,將作業系統核心除外,運作應用程式所需要的系統環境,由下而上打包,達到應用程式跨平台間的無縫接軌運作。(**/孫巨集亮)

系統服務docker化的障礙

雖然docker透過了映像檔設計,解決傳統維運團隊在部署上的問題。但是,在將系統服務docker化、應用程式docker化時,使用者仍然會碰到實際面的問題。

孫巨集亮表示,當應用程式必須排程系統的服務,例如利用cron服務,將工作設定為自動化執行,或是執行syslog服務收集系統日誌時,此時開發者就會碰到使用docker的障礙。

例如,雖然可以使用docker將cron服務打包,但是docker化的cron服務,與傳統linux中cron服務間有很大的區別。孫巨集亮表示,一旦將cron服務容器化後,原始的環境變數設定都會失效。所以使用者必須分析軟體、container的執行方式,才能滿足使用的需求。另外,docker與linux kernel的溝通能力薄弱,行程間溝通(inter-process communication,ipc)會被進行隔離。像是nfs伺服器接受客戶端提出的請求後,會將需求再次傳遞給linux kernel,「使用者將這些功能容器化前,都必須再三考慮。」他表示。

並非任何應用程式都適合docker化

而在應用程式docker化的方面,雖然docker的快速部署特性很吸引人,但是未必所有的應用程式都適合docker化,像是mysql,孫巨集亮認為如果將其docker化則存在一些弊端。例如,當使用者的資料需要進行額外備份,需要創造mysql的資料庫container,可以透過docker run指令,建立乙個mysql的database container,或是使用docker run指令,修改mysql的環境變數。而這些環境變數會透過docker daemon、docker engine,用json的檔桉格式儲存在docker container中。

存在於docker container中的環境變數,對於docker engine並沒有意義,但是對於使用docker的使用者則存在隱憂,如果被無關的第三方看見,使用者的container可能會產生資安上疑慮。所以,孫巨集亮認為,傳統開發者在使用mysql的思維,並不能無縫轉移到docker的世界中運作。

共用linux kernel,讓docker安全性先天不足

而從技術面的角度切入,孫巨集亮表示,docker就是分配硬體資源、實現資源隔離的container技術。而談到資源隔離,他表示,一般人會聯想到container技術中最基本的觀念,像是命名區域namespace及cgroup等技術。而docker container技術的火紅,以前無法透過vm執行的功能,現在也可以透過container實現。許多使用者因此也開始議論,是否可以利用container技術取代vm。

一般的實體伺服器,只要具備linux kernel就可以執行container,或是透過hypervisor層,使用linux kernel上運作的虛擬機器,執行container。孫巨集亮認為,以這樣的角度看待,linux kernel是運作container,所需滿足的最重要條件,而無論是實體伺服器或是vm,都能達到上述的條件。不過,container在實體機上運作,可以達到媲美裸機的效能,而在vm中運作時,則會產生效能折損。

而談到container的資源隔離,孫巨集亮表示,一般使用者最直覺想到的不外乎是cpu、記憶體以及io等運算資源。而他認為,「資源」的範疇應該不只如此。雖然container可以透過cgroup、namespace做到運算資源的隔離,但是,「如果沒有linux kernel,使用者也不可能運作container。」他表示,如果將linux kernel也納入資源的範疇,因為container與作業系統同時共用kernel,所以其實並沒有實現資源隔離。但是,vm與vm之間,並不會共用作業系統核心。因此,vm的資源隔離性一定會比container來得更好。

雖然docker container也會受到資源的隔離、控制,以及許可權控制,但是由於跟linux共用作業系統核心,進而會產生安全上的漏洞。為了解決這樣的問題,孫巨集亮表示,可以透過linux的capability機制,加強許可權的控管,使container內部的root跟外部的root許可權產生差異外,同時也讓container在系統管理的能力,與宿主主機進行區隔,藉此解決container的安全問題。

在去年推出的docker 1.9.0當中,docker也加入了username space機制,孫巨集亮表示,在安全性方面,這是docker所達成的乙個里程碑。只要透過namespace,讓container運作的時候,使用者可以擁有更多許可權,同時也不會影響到宿主主機。

docker簡介以及優缺點

docker 是乙個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到乙個可移植的容器中,然後發布到任何流行的linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。1.docker組成 乙個完整的docker有以下幾個部分組成 dockerclient客戶端 d...

三層架構優缺點

三層 體系結構 就是在客戶端與資料庫之間加入了乙個中介軟體層,也叫元件層。這裡所 說的三層體系,不是指物理上的三層,不是簡單地放置三颱機器就是三層體系結構,也 不僅僅有b s應用才是三層體系結構,三層是指邏輯上的三層,即使這三個層放置到一 臺機器上。三層體系的 應用程式層 將業務規則 資料訪問 合法...

一 B S,C S架構的優缺點

1 b s架構的優點 具有分布性特點,可以隨時隨地進行查詢,瀏覽等業務處理 業務擴充套件簡單方便,通過增加網頁即可增加伺服器功能 維護簡單方便,只需要改變網頁,即可實現所有使用者的同步更新 開發簡單,共享性強。2 b s架構的缺點 在跨瀏覽器上b s架構不盡如人意 表現要達到c s程式的程度要花費不...