虛擬化技術(四) Container技術

2021-09-10 01:34:37 字數 2538 閱讀 7275

前面介紹了。因為虛擬機器中guest os開銷太大,會造成隔離的虛機越多資源被浪費的就越多的情況出現。所以有人就會想,可不可以不啟動guest os,而是直接使用host os來模擬乙個相對完整的作業系統呢。這樣就不需要再在host os上跑guest os,按照這個思路,逐漸發展出來了作業系統級的虛擬化技術,就是利用作業系統本身的功能來實現虛擬化,這就是container技術 。結構如下圖(以docker為例):

container技術也可以在完整伺服器上隔離出多個完整的小的資源格仔出來,且互相之間資源是隔離的。但它利用的是作業系統本身的功能,所以在每個小格裡面不需要再去執行guest os 了,這部分資源的開銷就被省下來了,盡可能把資源提供出來供實際的應用使用 。

雖然container技術提供了這樣的功能,但是container技術在被發明的很長時間內都沒有得到廣泛的應用。原因在於:雖然它提供了這樣的功能但是,各個應用所需的環境不同,相對完整的作業系統環境要怎麼定義呢,這個環境要配成什麼樣才能算是完整的環境?

如上圖中所示,如果虛擬化出三個小格仔,且其中執行不同的應用,前兩個應用使用python2.7,第三個用的是python3.0,每個container所需要的環境不一致,那怎麼辦,關鍵是要怎麼管理。一種方式就是,你先登入host os的系統,在上面裝乙個python2.7然後虛擬兩個小格出來,在上面執行前兩個應用,這兩個應用可以直接使用host os上的python2.7;之後再虛擬出乙個小格出來,然後在這個小格里只用host os作業系統的核心,小格仔裡單獨裝乙個python3.0,這樣是可以達到這個目標的。如果只有三個container還好,但如果多了呢?以前我們說一台物理伺服器可以虛擬出20個或者30個虛擬機器出來,現在,因為不需要啟動guest os 了,乙個伺服器可以啟幾百上千個container出來,你乙個乙個的去配置嗎?就算你乙個乙個配置好了,你之後怎麼管理呢。所以當初container技術很難被廣泛使用。

返過頭來,我們可以看下為什麼虛擬機器沒有這個問題,因為虛擬機器就是乙個完整的映象檔案,本質上就是乙個檔案,如果是對於雲平台來說它儲存在乙個映象庫里的檔案,即便是沒有雲平台,沒有對應的管理工具,你用u盤拷貝都可以。只要將它拷貝到你宿主機的本地,然後用這個映象去啟動乙個虛機,那麼只要在生成這個映象的時候把環境配好(例如在生產這個映象檔案的時候就把jdk,hadoop,python都預裝好)做成映象,之後你在啟動虛擬機器的時候,當初你裝了什麼環境,啟動起來就是什麼環境。 因為他是純軟體的,不是物理的硬體,所以我們可以拷貝。

但是對於當初的container技術來說,沒有這樣的映象,所以虛擬出來眾多的container的配置管理就是乙個大問題,所以在之前的很多年裡container一直沒有得到大規模的應用。只有google在大量應用,因為google裡面對container的環境要求一樣,也就是說2000臺伺服器一樣的環境配置,我只需要用傳統的配置管理手段把這2000臺伺服器配置好,然後啟動那些container,因為container是共用作業系統的,所以啟動的container裡面的環境就都是一樣的。因此只有在這種場景才能大範圍應用。也就是container中需要的配置和host os 上執行的配置都是統一的,沒有那麼多差異的配置需要操心,因此可以大量應用。google當年用的container技術名字就叫linux containers(簡稱lxc)

那為什麼這幾年container一下子火了呢?因為出現了 docker,現在我們說docker是乙個container,甚至很多時候提到container就是指docker,而不是其他的container技術。然而docker剛誕生的時候甚至沒有自己的container技術,他用的就是lxc,但是它多做了一件事情,它發明了乙個叫做docker file的東西,這就是乙個文字檔案,裡面描述了這乙個container啟動時如何去配置它的環境,一行一行的寫的很清楚。所以當我們在用docker的時候,會按照docker file去啟動乙個container並且按照docker file的描述把相關的環境給配置好,最後把應用給啟動起來。這個時候我們就發現,docker file就具有與虛機映象類似的作用,實際上docker還有乙個概念叫docker映象。根據docker file生成乙個container的檔案系統,對檔案系統中存著的一些東西進行打包,就可以形成docker映象。docker映象的功能就跟虛機映象的功能非常的接近了,docker file和docker映象基本上是等價的,因為你有了docker file就可以根據docker file生成乙個docker映象。所以大家用的比較多的還是docker file。也正因為docker file解決了container技術最大的問題:實現環境的統一和管理。有了dockerfile以後就可以讓使用者在使用container技術的時候,方便對環境的管理,且任何應用或者服務的運營環境跟你當初在開發時的環境保持一致。需要提及的一點是,隨著docker的迅猛發展,之後lxc不夠docker玩了,所以他自己搞了一套container技術。

下一節介紹docker的應用場景、缺點以及與虛機技術的對比。

未完待續。。。。(謹以此系列文章緬懷逝去的學生時代)

虛擬化技術

虛擬化技術可以提供硬體,軟體上的虛擬化,從而節省成本。特別是對於需要修改或者隱藏操作細節的場景,虛擬化技術更加重要。容器化技術是可以用於替代容器化技術的,但是兩者確實可以融合,取長補短的。這裡容器化技術一般使用docker。vps基本上都是基於虛擬化技術的,例如vultr就是基於kvm核心虛擬化技術...

虛擬化技術

伺服器虛擬化 虛擬機器遷移 隔離技術 儲存虛擬化 網路虛擬化 桌面虛擬化 如果你開始閱讀這篇文章,就預設你了解什麼是馮諾伊曼結構。下圖就是經典的馮諾伊曼結構,有輸入輸出,有儲存器,有 cpu,而其中又有控制單元也有運算單元 alu。這些就構成基本的計算機硬體系統了。而所謂虛擬化技術指的就是,希望能在...

虛擬化技術

intel tsx ni 最白話的解釋就是乙個 執行緒鎖定判定邏輯的硬體加速,以前是在軟體層執行的,現在是硬體層了,方便程式設計和提公升執行效率 官方資料指出作用是能夠提公升多執行緒運算效能 vpro應該是商用機器上才會有支援,主要是提供mis從遠端管理機器,例如修補程式等,即使機器在關機的狀能,也...