有過后臺(tái)開發(fā)經(jīng)驗(yàn)的同學(xué),一定遇到過下面這些問題:程序在開發(fā)環(huán)境跑得好好的,但是部署到生產(chǎn)環(huán)境,卻狀況頻出;擔(dān)心客戶的環(huán)境上缺少某些必要的庫文件,或者某些文件的版本不符合要求。
有過后臺(tái)開發(fā)經(jīng)驗(yàn)的同學(xué),一定遇到過下面這些問題:程序在開發(fā)環(huán)境跑得好好的,但是部署到生產(chǎn)環(huán)境,卻狀況頻出;擔(dān)心客戶的環(huán)境上缺少某些必要的庫文件,或者某些文件的版本不符合要求。
什么是Docker
Docker是一個(gè)虛擬環(huán)境容器,可以將你的可執(zhí)行文件、配置文件及一切其他你需要的文件一并打包到這個(gè)容器中,并發(fā)布和應(yīng)用到任意平臺(tái)。比如,你在本地用Python開發(fā)了一個(gè)網(wǎng)站后臺(tái),開發(fā)測試完成后,就可以將Python3及其依賴包、Flask及其各種插件、Mysql、Nginx等打包到一個(gè)容器中,然后部署到任意你想部署到的環(huán)境。
如果不好理解,我們再拿集裝箱打個(gè)比方。
集裝箱解決了什么問題呢?在一艘大船上,可以把貨物規(guī)整的擺放起來。并且各種各樣的貨物被集裝箱標(biāo)準(zhǔn)化了,集裝箱和集裝箱之間不會(huì)互相影響。那么我就不需要專門運(yùn)送水果的船和專門運(yùn)送化學(xué)品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運(yùn)走。
docker也是類似的理念。我們可以在一臺(tái)機(jī)器上跑多個(gè)互相毫無關(guān)聯(lián)的docker容器,每一個(gè)容器就相當(dāng)于一個(gè)集裝箱。
Docker里的幾個(gè)基本概念
鏡像:鏡像可以理解為一堆靜態(tài)的文件
容器:容器則是鏡像run起來之后的一個(gè)實(shí)例。鏡像之于容器就好比面向?qū)ο缶幊汤锏腸lass之于object。
倉庫:鏡像需要地方保存,這個(gè)地方就是倉庫
與傳統(tǒng)虛擬化的區(qū)別
這里我們順便講一下傳統(tǒng)虛擬化。
我們看到,傳統(tǒng)虛擬化是站在硬件物理資源的基礎(chǔ)上,虛擬出多個(gè)OS,然后在OS的基礎(chǔ)上構(gòu)建相對獨(dú)立的程序運(yùn)行環(huán)境,而Dokcer則是在OS的基礎(chǔ)上進(jìn)行虛擬,顯然Dokcer輕量得多,因此其資源占用、性能消耗相比傳統(tǒng)虛擬化都有很大優(yōu)勢。
在IT行業(yè)從業(yè)多年,也算從看著時(shí)代從物理
服務(wù)器走向虛擬化
云計(jì)算時(shí)代,又準(zhǔn)備進(jìn)入Docker時(shí)代,作為下一代虛擬化技術(shù),Docker正改變著整個(gè)行業(yè)開發(fā)、測試、部署應(yīng)用的方式,至于虛擬化技術(shù)和docker技術(shù)到底有什么不同,下面來分析一下。
01 什么是虛擬化?
顧名思義,虛擬化技術(shù)是將物理資源以某種技術(shù)虛擬成資源池的形式,主要有一虛多和多虛一兩種形式,比如個(gè)人電腦安裝Vmware軟件,可以在這個(gè)軟件上安裝其他Win系統(tǒng)、MacOS、Linux系統(tǒng)等,實(shí)現(xiàn)一臺(tái)電腦/筆記本承載多個(gè)系統(tǒng)的優(yōu)點(diǎn),目前蘋果筆記本用戶雙系統(tǒng)解決方案也以
虛擬機(jī)為主,普通Windows用戶可能需求量不大,而技術(shù)人員基本是必備軟件了。
從企業(yè)層面來看,多虛一為主要形式,也就是將大量物理服務(wù)器集群虛擬化,形成一個(gè)資源池,在這個(gè)資源上創(chuàng)建各種不同的虛擬機(jī),實(shí)現(xiàn)靈活部署。
02 什么是Docker
其實(shí)docker和虛擬技術(shù)很像,但又有一些不同點(diǎn),一方面是兩個(gè)技術(shù)的層級上,虛擬機(jī)一般是底層硬件Hardware支撐,上層是虛擬管理系統(tǒng)Hypervisor層,在上層開啟不同的VM業(yè)務(wù),如果需要將這些業(yè)務(wù)進(jìn)行隔離,需要每個(gè)VM啟動(dòng)客戶機(jī)操作系統(tǒng),非常消耗資源。
Docker完全不同,底層有硬件和Host OS系統(tǒng)支撐,比如Windows/MacOS/Linux,中間拋去了臃腫的系統(tǒng),而是以Docker守護(hù)進(jìn)程代替,上層建立不同的容器,不同的應(yīng)用鏡像打包在不同的容器中,他們互相隔離。
03 虛擬化與docker的區(qū)別
docker設(shè)計(jì)小巧,部署遷移快速,運(yùn)行高效,應(yīng)用之間相互獨(dú)立,管理人員可以看到所有容器的內(nèi)容,虛擬化技術(shù)比較臃腫,不論什么應(yīng)用都需要先創(chuàng)建新的系統(tǒng),并且并非按照應(yīng)用隔離,而是按照系統(tǒng)隔離,管理員無法看到系統(tǒng)內(nèi)部信息。
舉個(gè)例子,Docker就是手機(jī)中的各種APP,只需要一個(gè)系統(tǒng)就可以下載自己所需的應(yīng)用,但是虛擬化技術(shù)相當(dāng)于你的蘋果手機(jī)安裝一個(gè)龐大軟件,這個(gè)軟件上安裝安卓系統(tǒng)、魅族系統(tǒng)等,每個(gè)系統(tǒng)上還要安裝各類應(yīng)用,比較麻煩。
但兩者沒有絕對的好壞,主要還是看應(yīng)用場景,根據(jù)不同的需求選擇不同的解決方案即可。