程序員修神之路--容器技術爲什麼會這麼流行

菜菜哥,你上次講的kubernetes我研究了一下,你再給我講講docker唄

張嘴女人.gif

docker可很流行呀

張嘴男人.gif

kubernetes是容器編排技術,容器不就是指的docker嗎?

張嘴女人.gif

docker可不等於容器哦,docker只算是容器的一種吧,算了容器的典型代表

張嘴男人.gif
容器的誕生

在傳統的軟件部署方式中,程序員需要把要發佈的應用程序打成包發給運維人員,然後由運維人員在生產環境進行部署。當隨着應用的版本迭代越來越多,應用的依賴庫版本錯綜複雜,往往會出現開發環境和生產環境不一致的情況發生,而且由於多數情況下采用微服務的架構,每個團隊都有可能使用不同版本的依賴庫,並有可能在升級的時候替換掉他們,因而同一個應用程序採用相同版本的依賴庫是多麼的重要。

當應用程序比較少或者都是一些單體應用的時候,可以利用虛擬機來隔離每個服務,通過虛擬機的虛擬化技術來爲每個應用程序提供不同的運行環境。但是當拆分爲微服務之後,每個服務會變的小而多,這個時候如果爲每個應用程序分配一個虛擬機,資源耗費是相當多的,但是每個虛擬機上運行多個微服務又會發生依賴庫版本的問題,如果有一種起到類似虛擬機隔離作用,但是成本比虛擬機低很多的技術該有多好?

容器技術

得益於linux的容器技術,現代開發者已經由傳統的虛擬機方式轉向linux容器技術。容器類似虛擬機,但比虛擬機開銷要小的多,並且同樣把每個應用都隔離開來。容器技術允許你在同一臺服務器上運行多個服務,而且還可以根據每個服務提供不同的運行環境。

虛擬機中的進程運行在虛擬機的操作系統中,而運行在容器中的進程實際是運行在宿主機的操作系統中,只是表面看來好像運行在容器的沙盒一樣,但實際上確實是和其他進程相互隔離的。

linux之所以能實現容器這種功能,得益於它的命名空間和控制組。linux命名空間時每個進程相互隔離,只能看到它自己的系統資源,例如:文件,進程,網絡等,而linux的控制組技術能夠限制每個進程可以使用的資源的最大量。一個技術進行隔離,一個技術進行限制,這就導致了容器技術要比虛擬機要靈活的多。

微信截圖_20191130123457.png

虛擬機和容器

一個虛擬機的正常運行,需要運行自己的一系列系統進程,只是這些系統進程就耗費了大量資源。容器和虛擬機相比較就顯得輕量的多,它允許在相同配置的硬件基礎上運行更多數量的應用。雖然容器本身也有消耗,但是和虛擬機系統的消耗比起來要小的多。

虛擬機是利用軟件技術將物理硬件虛擬化爲多個虛擬硬件資源,從而被每個虛擬機的操作系統使用。虛擬機裏的進程會進行虛擬機的系統調用,虛擬機的指令會通過軟件技術變爲宿主機上真正的cpu指令,而容器中的進程執行的指令不需要任何的虛擬化過程,直接會被cpu執行,所以單純在執行指令的過程中,虛擬機要比容器的執行過程要長,資源耗費要多。

docker介紹

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker容器平臺的出現把linxu容器化技術推向了一個高潮,它不僅簡化了程序部署的方式,更簡化了打包應用和依賴,使容器真正做到了在不同的操作系統之間移植,甚至一個完整的操作系統也可以被打包成一個可移植的鏡像。

運行docker包的前提是,目標機器一定要運行docker。

當你的應用被打包成docker鏡像之後,無論在什麼操作系統中運行,它都能看見相同的文件,相同的依賴庫,因爲這些依賴庫已經被一起打包到了docker鏡像中,即使目標機器上安裝了正確的版本的依賴庫,它也會只用鏡像中的依賴庫,這就是程序員期盼的無論何時何地的環境一致性呀



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