1.Docker簡(jiǎn)介
1.1虛擬化
1.1.1什么是虛擬化
在計(jì)算機(jī)中,虛擬化(英語(yǔ):Virtualization)是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲(chǔ)等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來(lái),打破實(shí)體結(jié)構(gòu)間的不可切割的障礙,使用戶(hù)可以比原本的組態(tài)更好的方式來(lái)應(yīng)用這些資源。這些資源的新虛擬部份是不受現(xiàn)有資源的架設(shè)方式,地域或物理組態(tài)所限制。一般所指的虛擬化資源包括計(jì)算能力和資料存儲(chǔ)。
在實(shí)際的生產(chǎn)環(huán)境中,虛擬化技術(shù)主要用來(lái)解決高性能的物理硬件產(chǎn)能過(guò)剩和老的舊的硬件產(chǎn)能過(guò)低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件對(duì)資源充分利用虛擬化技術(shù)種類(lèi)很多,例如:軟件虛擬化、硬件虛擬化、內(nèi)存虛擬化、網(wǎng)絡(luò)虛擬化(vip)、桌面虛擬化、服務(wù)虛擬化、虛擬機(jī)等等。
1.1.2虛擬化種類(lèi)
(1)全虛擬化架構(gòu) 虛擬硬件 —>虛擬操作系統(tǒng)
虛擬機(jī)的監(jiān)視器(hypervisor)是類(lèi)似于用戶(hù)的應(yīng)用程序運(yùn)行在主機(jī)的OS之上,如VMware的workstation,這種虛擬化產(chǎn)品提供了虛擬的硬件。
(2)OS層虛擬化架構(gòu): 不對(duì)硬件進(jìn)行虛擬化,相同內(nèi)核操作系統(tǒng)
(3)硬件層虛擬化
硬件層的虛擬化具有高性能和隔離性,因?yàn)閔ypervisor直接在硬件上運(yùn)行,有利于控制VM的OS訪問(wèn)硬件資源,使用這種解決方案的產(chǎn)品有VMware ESXi 和 Xen server
Hypervisor是一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個(gè)操作系統(tǒng)和應(yīng)用共享一套基礎(chǔ)物理硬件,因此也可以看作是虛擬環(huán)境中的“元”操作系統(tǒng),它可以協(xié)調(diào)訪問(wèn)服務(wù)器上的所有物理設(shè)備和虛擬機(jī),也叫虛擬機(jī)監(jiān)視器(Virtual Machine Monitor,VMM)。
Hypervisor是所有虛擬化技術(shù)的核心。當(dāng)服務(wù)器啟動(dòng)并執(zhí)行Hypervisor時(shí),它會(huì)給每一臺(tái)虛擬機(jī)分配適量的內(nèi)存、CPU、網(wǎng)絡(luò)和磁盤(pán),并加載所有虛擬機(jī)的客戶(hù)操作系統(tǒng)。宿主機(jī)
Hypervisor是所有虛擬化技術(shù)的核心,軟硬件架構(gòu)和管理更高效、更靈活,硬件的效能能夠更好地發(fā)揮出來(lái)。常見(jiàn)的產(chǎn)品有:VMware、KVM、Xen等等。Openstack
1.2什么是Docker
1.2.1容器技術(shù) 類(lèi)似OS層虛擬化架構(gòu):
在計(jì)算機(jī)的世界中,容器擁有一段漫長(zhǎng)且傳奇的歷史。容器與管理程序虛擬化(hypervisor virtualization,HV)有所不同,管理程序虛擬化通過(guò)中間層將一臺(tái)或者多臺(tái)獨(dú)立的機(jī)器虛擬運(yùn)行與物理硬件之上,而容器則是直接運(yùn)行在操作系統(tǒng)內(nèi)核之上的用戶(hù)空間。因此,容器虛擬化也被稱(chēng)為“操作系統(tǒng)級(jí)虛擬化”,容器技術(shù)可以讓多個(gè)獨(dú)立的用戶(hù)空間運(yùn)行在同一臺(tái)宿主機(jī)上。
由于“客居”于操作系統(tǒng),容器只能運(yùn)行與底層宿主機(jī)相同或者相似的操作系統(tǒng),這看起來(lái)并不是非常靈活。例如:可以在Ubuntu服務(wù)中運(yùn)行Redhat Enterprise Linux,但無(wú)法再Ubuntu服務(wù)器上運(yùn)行Microsoft Windows。
相對(duì)于徹底隔離的管理程序虛擬化,容器被認(rèn)為是不安全的。而反對(duì)這一觀點(diǎn)的人則認(rèn)為,由于虛擬容器所虛擬的是一個(gè)完整的操作系統(tǒng),這無(wú)疑增大了攻擊范圍,而且還要考慮管理程序?qū)訚撛诘谋┞讹L(fēng)險(xiǎn)。
盡管有諸多局限性,容器還是被廣泛部署于各種各樣的應(yīng)用場(chǎng)合。在超大規(guī)模的多租戶(hù)服務(wù)部署、輕量級(jí)沙盒以及對(duì)安全要求不太高的隔離環(huán)境中,容器技術(shù)非常流行。最常見(jiàn)的一個(gè)例子就是“權(quán)限隔離監(jiān)牢”(chroot jail),它創(chuàng)建一個(gè)隔離的目錄環(huán)境來(lái)運(yùn)行進(jìn)程。如果權(quán)限隔離監(jiān)牢正在運(yùn)行的進(jìn)程被入侵者攻破,入侵者便會(huì)發(fā)現(xiàn)自己“身陷囹圄”,因?yàn)闄?quán)限不足被困在容器所創(chuàng)建的目錄中,無(wú)法對(duì)宿主機(jī)進(jìn)一步破壞。
最新的容器技術(shù)引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用這些新技術(shù),容器不在僅僅是一個(gè)單純的運(yùn)行環(huán)境。在自己的權(quán)限類(lèi)內(nèi),容器更像是一個(gè)完整的宿主機(jī)。對(duì)Docker來(lái)說(shuō),它得益于現(xiàn)代Linux特性,如控件組(control group)、命名空間(namespace)技術(shù),容器和宿主機(jī)之間的隔離更加徹底,容器有獨(dú)立的網(wǎng)絡(luò)和存儲(chǔ)棧,還擁有自己的資源管理能力,使得同一臺(tái)宿主機(jī)中的多個(gè)容器可以友好的共存。
容器被認(rèn)為是精益技術(shù),因?yàn)槿萜餍枰拈_(kāi)銷(xiāo)有限。和傳統(tǒng)虛擬化以及半虛擬化相比,容器不需要模擬層(emulation layer)和管理層(hypervisor layer),而是使用操作系統(tǒng)的系統(tǒng)調(diào)用接口。這降低了運(yùn)行單個(gè)容器所需的開(kāi)銷(xiāo),也使得宿主機(jī)中可以運(yùn)行更多的容器。
盡管有著光輝的歷史,容器仍未得到廣泛的認(rèn)可。一個(gè)很重要的原因就是容器技術(shù)的復(fù)雜性:容器本身就比較復(fù)雜,不易安裝,管理和自動(dòng)化也很困難。而Docker就是為了改變這一切而生的。
1.2.2容器與虛擬機(jī)比較
(1)本質(zhì)上的區(qū)別
(2)使用上的區(qū)別
1.2.3 Docker特點(diǎn)
(1)上手快。
用戶(hù)只需要幾分鐘,就可以把自己的程序“Docker化”。Docker依賴(lài)于“寫(xiě)時(shí)復(fù)制”(copy-on-write)模型,使修改應(yīng)用程序也非常迅速,可以說(shuō)達(dá)到“隨心所致,代碼即改”的境界。
隨后,就可以創(chuàng)建容器來(lái)運(yùn)行應(yīng)用程序了。大多數(shù)Docker容器只需要不到1秒中即可啟動(dòng)。由于去除了管理程序的開(kāi)銷(xiāo),Docker容器擁有很高的性能,同時(shí)同一臺(tái)宿主機(jī)中也可以運(yùn)行更多的容器,使用戶(hù)盡可能的充分利用系統(tǒng)資源。
(2)職責(zé)的邏輯分類(lèi)
使用Docker,開(kāi)發(fā)人員只需要關(guān)心容器中運(yùn)行的應(yīng)用程序,而運(yùn)維人員只需要關(guān)心如何管理容器。Docker設(shè)計(jì)的目的就是要加強(qiáng)開(kāi)發(fā)人員寫(xiě)代碼的開(kāi)發(fā)環(huán)境與應(yīng)用程序要部署的生產(chǎn)環(huán)境一致性。從而降低那種“開(kāi)發(fā)時(shí)一切正常,肯定是運(yùn)維的問(wèn)題(測(cè)試環(huán)境都是正常的,上線后出了問(wèn)題就歸結(jié)為肯定是運(yùn)維的問(wèn)題)”
(3)快速高效的開(kāi)發(fā)生命周期
Docker的目標(biāo)之一就是縮短代碼從開(kāi)發(fā)、測(cè)試到部署、上線運(yùn)行的周期,讓你的應(yīng)用程序具備可移植性,易于構(gòu)建,并易于協(xié)作。(通俗一點(diǎn)說(shuō),Docker就像一個(gè)盒子,里面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)
(4)鼓勵(lì)使用面向服務(wù)的架構(gòu)
Docker還鼓勵(lì)面向服務(wù)的體系結(jié)構(gòu)和微服務(wù)架構(gòu)。Docker推薦單個(gè)容器只運(yùn)行一個(gè)應(yīng)用程序或進(jìn)程,這樣就形成了一個(gè)分布式的應(yīng)用程序模型,在這種模型下,應(yīng)用程序或者服務(wù)都可以表示為一系列內(nèi)部互聯(lián)的容器,從而使分布式部署應(yīng)用程序,擴(kuò)展或調(diào)試應(yīng)用程序都變得非常簡(jiǎn)單,同時(shí)也提高了程序的內(nèi)省性。(當(dāng)然,可以在一個(gè)容器中運(yùn)行多個(gè)應(yīng)用程序)
1.3 Docker組件
1.3.1 Docker客戶(hù)端和服務(wù)器
Docker是一個(gè)客戶(hù)端-服務(wù)器(C/S)架構(gòu)程序。Docker客戶(hù)端只需要向Docker服務(wù)器或者守護(hù)進(jìn)程發(fā)出請(qǐng)求,服務(wù)器或者守護(hù)進(jìn)程將完成所有工作并返回結(jié)果。Docker提供了一個(gè)命令行工具Docker以及一整套R(shí)ESTful API。你可以在同一臺(tái)宿主機(jī)上運(yùn)行Docker守護(hù)進(jìn)程和客戶(hù)端,也可以從本地的Docker客戶(hù)端連接到運(yùn)行在另一臺(tái)宿主機(jī)上的遠(yuǎn)程Docker守護(hù)進(jìn)程。
1.3.2 Docker鏡像
鏡像是構(gòu)建Docker的基石。用戶(hù)基于鏡像來(lái)運(yùn)行自己的容器。鏡像也是Docker生命周期中的“構(gòu)建”部分。鏡像是基于聯(lián)合文件系統(tǒng)的一種層式結(jié)構(gòu),由一系列指令一步一步構(gòu)建出來(lái)。例如:
- 添加一個(gè)文件;
- 執(zhí)行一個(gè)命令;
- 打開(kāi)一個(gè)窗口。
也可以將鏡像當(dāng)作容器的“源代碼”。鏡像體積很小,非?!氨銛y”,易于分享、存儲(chǔ)和更新。
1.3.3 Registry(注冊(cè)中心)
Docker用Registry來(lái)保存用戶(hù)構(gòu)建的鏡像。Registry分為公共和私有兩種。Docker公司運(yùn)營(yíng)公共的Registry叫做Docker Hub。用戶(hù)可以在Docker Hub注冊(cè)賬號(hào),分享并保存自己的鏡像(說(shuō)明:在Docker Hub下載鏡像巨慢,可以自己構(gòu)建私有的Registry)。
1.3.4 Docker容器
Docker可以幫助你構(gòu)建和部署容器,你只需要把自己的應(yīng)用程序或者服務(wù)打包放進(jìn)容器即可。容器是基于鏡像啟動(dòng)起來(lái)的,容器中可以運(yùn)行一個(gè)或多個(gè)進(jìn)程。我們可以認(rèn)為,鏡像是Docker生命周期中的構(gòu)建或者打包階段,而容器則是啟動(dòng)或者執(zhí)行階段。 容器基于鏡像啟動(dòng),一旦容器啟動(dòng)完成后,我們就可以登錄到容器中安裝自己需要的軟件或者服務(wù)。
所以Docker容器就是:
- 一個(gè)鏡像格式;
- 一些列標(biāo)準(zhǔn)操作;
- 一個(gè)執(zhí)行環(huán)境。
Docker借鑒了標(biāo)準(zhǔn)集裝箱的概念。標(biāo)準(zhǔn)集裝箱將貨物運(yùn)往世界各地,Docker將這個(gè)模型運(yùn)用到自己的設(shè)計(jì)中,唯一不同的是:集裝箱運(yùn)輸貨物,而Docker運(yùn)輸軟件。
和集裝箱一樣,Docker在執(zhí)行上述操作時(shí),并不關(guān)心容器中到底裝了什么,它不管是web服務(wù)器,還是數(shù)據(jù)庫(kù),或者是應(yīng)用程序服務(wù)器什么的。所有的容器都按照相同的方式將內(nèi)容“裝載”進(jìn)去。
Docker也不關(guān)心你要把容器運(yùn)到何方:我們可以在自己的筆記本中構(gòu)建容器,上傳到Registry,然后下載到一個(gè)物理的或者虛擬的服務(wù)器來(lái)測(cè)試,在把容器部署到具體的主機(jī)中。像標(biāo)準(zhǔn)集裝箱一樣,Docker容器方便替換,可以疊加,易于分發(fā),并且盡量通用。
使用Docker,我們可以快速的構(gòu)建一個(gè)應(yīng)用程序服務(wù)器、一個(gè)消息總線、一套實(shí)用工具、一個(gè)持續(xù)集成(CI)測(cè)試環(huán)境或者任意一種應(yīng)用程序、服務(wù)或工具。我們可以在本地構(gòu)建一個(gè)完整的測(cè)試環(huán)境,也可以為生產(chǎn)或開(kāi)發(fā)快速?gòu)?fù)制一套復(fù)雜的應(yīng)用程序棧。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接