昨天在第一篇的結尾,預告了今天的主題,那就是這幾年容器虛擬化的明星Docker。能夠說,在互聯網技術圈裏,已經很難找到沒有據說過Docker的工程師;感受沒將開發和測試環境經過Docker來部署,都很差意思給人家打招呼,更別說騰訊,京東,Weibo這些大廠早就將Docker大規模的運用在生產環境中了。因此,今天我會結合本身和Docker的故事來聊聊這項技術。
前端
初見Docker
linux
說以前,有個背景故事要交待一下:2014年末,我已經離開eBay, 加入順豐,參與順豐海淘的建設。那時候,正是項目大興土木,百廢待興的階段,那時候5-6個項目並行開發是屢見不鮮,同時,因爲咱們從一開始就走的微服務路線,十幾個Dubbo服務,前端,緩存,ZK等等,所有部署單例擠在一塊兒,再怎麼省,每搭一套環境也須要8-9臺VM,算下來,仍是有必定的成本的。
docker
本着下降維護成本+節約做爲出發點,團隊裏有兩位運維的兄弟,就開始琢磨Docker,但願引入Docker下降維護和機器的成本。實際上,我後續對Docker的入門,就是從他們兩位身上學到的。:)緩存
簡單來講,Docker是一個Linux容器管理工具,Linux容器技術基於Linux內核提供的兩個機制:Cgroups(實現資源按需分配)和Namespace(實現任務隔離)。微信
Container和VM的對比
架構
因爲使用的技術徹底不一樣,容器和虛擬機也有不少不一樣的地方:
運維
相比於VM上部署的二進制文件,服務能夠經過以docker鏡像的方式交付,其部署很是輕量、快速,而且額外開銷很低。作過VM鏡像的朋友都知道,VM的鏡像通常須要達到幾個GB甚至10GB以上,而當咱們經過docker製做容器鏡像的時候,發現鏡像才幾十MB;VM啓動通常都要分鐘級別,而啓動容器只須要秒級。
分佈式
因此二者最大的區別就是容器比虛擬機明顯更輕量級,對宿主機操做系統而言,容器就跟一個進程差很少。所以容器有着更快的啓動速度,更高密度的存儲和使用、更方便的集羣管理等優勢。很重要的一點在於,在容器中運行應用和直接在宿主機上幾乎沒有性能損失,同時比虛擬機明顯性能上有優點。微服務
最後,咱們將全部的測試環境所有作成了基於Docker的環境,而且作了一鍵部署新環境的腳本(當時感受真是很贊),惟一遺憾的是,因爲時間緣由,當時咱們對Docker吃得還不透,好比容器內外服務通訊的坑,沒有一個明確的解決方案,因此到最後也未敢將Docker引入到生產環境中。
工具
Container能徹底取代VM?
在我看來,這個問題的答案是否認的。
首先,容器最近幾年才真正興起,配套技術和標準還在完善中。而虛擬機技術已經發展了不少年了,虛擬機和虛擬化層間的接口、虛擬機鏡像格式等都已經標準化了,相應的管理工具、分佈式集羣管理工具都有比較完善的解決方案,
其次,如前文所說,docker的隔離技術主要基於linux內核namespace和cgroup這2個功能,但裏面還有不少隔離不完善的地方,如/proc、/dev設備、內核模塊、syslog等信息並無包含在namespace之中,決定了同宿主上的docker不能提供給多個用戶同時使用。
最後,虛擬機因爲有自身的OS存在,能夠和宿主機運行不一樣OS,而容器只能支持和宿主機內核相同的操做系統。並且虛擬機因爲有VMM的存在,虛擬機之間、虛擬機和宿主機之間隔離性很好,而容器之間公用宿主機的內核,共享系統調用和一些底層的庫,隔離性相對較差。
因此,在SaaS和PaaS領域裏,以Docker爲表明的Container能表現出明顯的優點,但在IaaS領域,VM的地位目前是沒法撼動的。
下篇預告
Docker 實現了建立和管理容器,但在現實項目落地的過程當中,還遠遠不夠,咱們還須要一個容器集羣的管理平臺,搭建PaaS平臺。在這個關鍵時刻,怎麼能少到了互聯網技術聖殿Google的身影呢?Kubernetes的推出,也進一步推動了容器技術的發展。接下來,咱們就來聊聊容器集羣的大腦Kubernetes。
掃描二維碼或手動搜索微信公衆號【架構棧】: ForestNotes
歡迎轉載,帶上如下二維碼便可