在實(shí)際的軟件開發(fā)過程中,我們需要多的環(huán)境:如開發(fā)環(huán)境、測試環(huán)境、沙箱環(huán)境、自動(dòng)化環(huán)境、預(yù)發(fā)環(huán)境、生產(chǎn)環(huán)境……這么多的環(huán)境要如何維護(hù)呢?是一臺(tái)機(jī)器部署一個(gè)應(yīng)用,還是一臺(tái)機(jī)器部署多個(gè)應(yīng)用?多個(gè)應(yīng)用之前又要怎么隔離呢?這時(shí)候就需要使用到虛擬化技術(shù)了。 最早的虛擬化技術(shù)是虛擬機(jī),所謂虛擬機(jī)(Virtual Machine)指通過軟件模擬的具有完整硬件系統(tǒng)功能的、運(yùn)行在一個(gè)完全隔離環(huán)境中的完整計(jì)算機(jī)系統(tǒng) 。這個(gè)聽起來有些繞口,其實(shí)就是通過軟件的隔離,讓你的電腦能夠同步安裝多個(gè)完整的計(jì)算機(jī)系統(tǒng),這里說的軟件比較有名的就是VMWare和OpenStack,通過VMWare或OpenStack,我們?cè)谠瓉淼碾娔X中模擬出一臺(tái)甚至多臺(tái)“子電腦”出來。這些子電腦可以是Mac、windows、linux中的任意系統(tǒng)、任意版本,只你軟件支持且你能找到鏡像。在“子電腦”里,你可以和正常電腦一樣運(yùn)行程序,例如打開word。各個(gè)子電腦之間的軟件硬件都是相互隔離的,互不影響的。 虛擬化有哪些優(yōu)勢?虛擬機(jī)能夠讓一臺(tái)機(jī)器像多臺(tái)機(jī)器一樣運(yùn)行,這意味著您需要的服務(wù)器更少,并且還可以最大限度地利用您擁有的服務(wù)器。這種效率的提高能夠節(jié)省硬件、冷卻和維護(hù)成本。借助虛擬化,我們可以在同一臺(tái)機(jī)器上運(yùn)行多種類型的應(yīng)用、桌面和操作系統(tǒng)。 棄用虛擬機(jī)但今天我們要說的是,我們要棄用虛擬機(jī),投入容器化的懷抱,為何?LXC,就是Linux容器虛擬技術(shù)(Linux container),它是Docker容器技術(shù)的基礎(chǔ),Docker輕量級(jí)的虛擬化,虛擬機(jī)雖然可以隔離出很多“子電腦”,但占用空間更大,啟動(dòng)慢。而容器技術(shù)恰好沒有這些缺點(diǎn),它不需要虛擬出整個(gè)操作系統(tǒng),只需要虛擬一個(gè)小規(guī)模的環(huán)境(類似“沙箱”)。 傳統(tǒng)虛擬機(jī)在硬件層面上實(shí)現(xiàn)虛擬化,需要有額外的虛擬機(jī)管理應(yīng)用和虛擬機(jī)操作系統(tǒng),而Docker容器是在操作系統(tǒng)層面上實(shí)現(xiàn)的虛擬化,直接利用本地主機(jī)的操作系統(tǒng),因此更輕量。 Docker容器本質(zhì)上是宿主機(jī)上的一個(gè)進(jìn)程。Docker 通過命名空間實(shí)現(xiàn)了資源隔離,通過 cgroups實(shí)現(xiàn)了資源的限制,通過寫時(shí)復(fù)制機(jī)制(copy-on-write)實(shí)現(xiàn)了高效的文件操作。能夠?qū)崿F(xiàn)更快速的交付和部署;更高效的虛擬化;更輕松的遷移和擴(kuò)展;更簡單的管理。 舉個(gè)簡單的例子:傳統(tǒng)我們蓋房子需要木料、水泥、磚頭……,需要選好施工地,并請(qǐng)工人來進(jìn)行一定時(shí)長的工作。等下次我們需要在一個(gè)新的地方重新蓋房子,就又要重新來一次。Docker將已經(jīng)蓋好的房子,通過魔法背包打包成鏡像,里面只是房子模型,沒有任何的實(shí)際生活用品以保證輕量,等到了一個(gè)新的地方,我們只要取出背包中的鏡像,房子就還原回來了,想要什么房子就用什么鏡像,實(shí)現(xiàn)“Build?once,Run?anywhere(搭建一次,到處能用)”。 |
|