大數(shù)據(jù)分析:Docker虛擬化解析
一.為什么會(huì)有Docker出現(xiàn)
一款產(chǎn)品從開發(fā)到上線,從操作系統(tǒng),到運(yùn)行環(huán)境,再到應(yīng)用配置。作為開發(fā)+運(yùn)維之間的協(xié)作我們需要關(guān)心很多東西,這也是很多互聯(lián)網(wǎng)公司都不得不面對(duì)的問題,特別是各種版本的迭代之后,不同版本環(huán)境的兼容,對(duì)運(yùn)維人員都是考驗(yàn) .Docker之所以發(fā)展如此迅速,也是因?yàn)樗鼘?duì)此給出了一個(gè)標(biāo)準(zhǔn)化的解決方案。
環(huán)境配置如此麻煩,換一臺(tái)機(jī)器,就要重來一次,費(fèi)力費(fèi)時(shí)。很多人想到,能不能從根本上解決問題,軟件可以帶環(huán)境安裝?也就是說,安裝的時(shí)候,把原始環(huán)境一模一樣地復(fù)制過來。
開發(fā)人員利用 Docker 可以消除協(xié)作編碼時(shí)“在我的機(jī)器上可正常工作”的問題。開發(fā)需要清楚的告訴運(yùn)維部署團(tuán)隊(duì),用的全部配置文件+所有軟件環(huán)境不過,即便如此,仍然常常發(fā)生部署失敗的狀況。
Docker鏡像的設(shè)計(jì),使得Docker得以打破過去"程序即應(yīng)用" 的觀念。透過鏡像(images)將作業(yè)系統(tǒng)核心除外,運(yùn)作應(yīng)用程式所需要的系統(tǒng)環(huán)境,由下而上打包,達(dá)到應(yīng)用程式跨平臺(tái)間的無縫接軌運(yùn)作。在這里插入圖片描述。

二.什么是Docker
Docker是基于Go語言實(shí)現(xiàn)的云開源項(xiàng)目。Docker的主要目標(biāo)是“Build,Ship and Run Any APP,Anywhere”,也就是通過對(duì)應(yīng)組件的封裝、分發(fā)、部署、運(yùn)行等生命周期的管理,是用戶的App及其運(yùn)行環(huán)境能夠做到“一次封裝,到處運(yùn)行”。
Linux容器技術(shù)的出現(xiàn)就解決了這樣一個(gè)問題,而Docker就是在它的基礎(chǔ)上發(fā)展過來的。將應(yīng)用運(yùn)行的Docker容器上面,而Docker容器在任何操作系統(tǒng)上都是一致的,這就實(shí)現(xiàn)了跨平臺(tái)、跨服務(wù)器。只需要一次配置好環(huán)境,換到別的機(jī)器上就可以一鍵部署好,大大簡(jiǎn)化了操作,Docker解決了運(yùn)行環(huán)境和配置軟件容器,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)。
三.虛擬機(jī)技術(shù)與容器虛擬化技術(shù)
虛擬機(jī)就是帶環(huán)境安裝的一種解決方案。 它可以在一種操作系統(tǒng)里面運(yùn)行另一種操作系統(tǒng),比如在windows系統(tǒng)里運(yùn)行Linux系統(tǒng)。應(yīng)用程序?qū)Υ撕翢o感知,因?yàn)樘摂M機(jī)看上去就跟真實(shí)的系統(tǒng)一樣,能夠使應(yīng)用程序,操作系統(tǒng)和硬件三者之間邏輯不變

虛擬機(jī)的缺點(diǎn):
資源占用多
冗余步驟多
啟動(dòng)慢
由于虛擬機(jī)存在這些缺點(diǎn),Linux發(fā)展出了另一種虛擬化技術(shù):Linux容器(LinuxContainers,縮寫為LXC)。
Linux容器不是模擬一個(gè)完整的操作系統(tǒng),而是對(duì)進(jìn)程進(jìn)程進(jìn)行隔離。有了容器就可以將軟件運(yùn)行所需的所有資源打包到一個(gè)隔離的容器中。容器與虛擬機(jī)不同,不需要捆包一整套操作系統(tǒng),只需要軟件工程所需的庫資源和設(shè)置。系統(tǒng)因此而變得高效輕量并保證部署在任何環(huán)境中的軟件都能始終如一的工作。

比較Docker和傳統(tǒng)虛擬機(jī)方式的不同之處:
傳統(tǒng)虛擬機(jī)技術(shù)是虛擬機(jī)出一套硬件后,在其上運(yùn)行一個(gè)完整操作系統(tǒng),在該系統(tǒng)上在運(yùn)行所需應(yīng)用進(jìn)程;
而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。每個(gè)容器之間相互隔離,每個(gè)容器有自己的文件系統(tǒng),容器之間進(jìn)程不會(huì)互相影響,能區(qū)分計(jì)算字資源。
四.Docker的基本組成

Docker鏡像(image)就是一個(gè)只讀的模板。鏡像可以用來創(chuàng)建Docker容器,一個(gè)鏡像可以創(chuàng)建很多容器。
Docker容器(Container)獨(dú)立運(yùn)行的一個(gè)或一組應(yīng)用。容器就是鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)??梢园讶萜骺醋鍪且粋€(gè)建議的Linux環(huán)境和運(yùn)行在其中的應(yīng)用程序。容器的定義和鏡像幾乎一模一樣,也是一堆層的統(tǒng)一視角,唯一區(qū)別在于容器的最上層那一層是可讀可寫的。
Docker倉庫(Repository)是集中存放鏡像文件的場(chǎng)所。倉庫和倉庫注冊(cè)服務(wù)器是有區(qū)別的。倉庫注冊(cè)服務(wù)器上往往存放著很多個(gè)倉庫,每一個(gè)倉庫又包含了多個(gè)鏡像,每個(gè)鏡像有不同的的標(biāo)簽(tag)。倉庫分為公開倉庫和私有倉庫兩種形式。最大的公開倉庫是DockerHub
Docker本身是一個(gè)容器運(yùn)行載體或稱之為管理引擎。我們把應(yīng)用程序或配置依賴打包好形成一個(gè)可交付的運(yùn)行環(huán)境,這個(gè)打包好的運(yùn)行環(huán)境就似乎image鏡像文件。只有通過這個(gè)鏡像文件才能生成Docker容器。image文件可以看作是容器的模板。Docker根據(jù)image文件生成容器的實(shí)例??梢陨啥鄠€(gè)同時(shí)運(yùn)行的容器實(shí)例。
五、為什么使用Docker
Docker 在如下幾個(gè)方面具有較大的優(yōu)勢(shì):
更快速的交付和部署
Docker在整個(gè)開發(fā)周期都可以***的輔助你實(shí)現(xiàn)快速交付。Docker允許開發(fā)者在裝有應(yīng)用和服務(wù)本地容器做開發(fā)。可以直接集成到可持續(xù)開發(fā)流程中。
開發(fā)者可以使用一個(gè)標(biāo)準(zhǔn)的鏡像來構(gòu)建一套開發(fā)容器,開發(fā)完成之后,運(yùn)維人員可以直接使用這個(gè)容器來部署代碼。 Docker 可以快速創(chuàng)建容器,快速迭代應(yīng)用程序,并讓整個(gè)過程全程可見,使團(tuán)隊(duì)中的其他成員更容易理解應(yīng)用程序是如何創(chuàng)建和工作的。 Docker 容器很輕很快!容器的啟動(dòng)時(shí)間是秒級(jí)的,大量地節(jié)約開發(fā)、測(cè)試、部署的時(shí)間。
高效的部署和擴(kuò)容
Docker 容器幾乎可以在任意的平臺(tái)上運(yùn)行,包括物理機(jī)、虛擬機(jī)、公有云、私有云、個(gè)人電腦、服務(wù)器等。 這種兼容性可以讓用戶把一個(gè)應(yīng)用程序從一個(gè)平臺(tái)直接遷移到另外一個(gè)。
Docker的兼容性和輕量特性可以很輕松的實(shí)現(xiàn)負(fù)載的動(dòng)態(tài)管理。你可以快速擴(kuò)容或方便的下線的你的應(yīng)用和服務(wù),這種速度趨近實(shí)時(shí)。
更高的資源利用率
Docker 對(duì)系統(tǒng)資源的利用率很高,一臺(tái)主機(jī)上可以同時(shí)運(yùn)行數(shù)千個(gè) Docker 容器。容器除了運(yùn)行其中應(yīng)用外,基本不消耗額外的系統(tǒng)資源,使得應(yīng)用的性能很高,同時(shí)系統(tǒng)的開銷盡量小。傳統(tǒng)虛擬機(jī)方式運(yùn)行 10 個(gè)不同的應(yīng)用就要起 10 個(gè)虛擬機(jī),而Docker 只需要啟動(dòng) 10 個(gè)隔離的應(yīng)用即可。
更簡(jiǎn)單的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分發(fā)和更新,從而實(shí)現(xiàn)自動(dòng)化并且高效的管理。