您好,登錄后才能下訂單哦!
這篇“Docker虛擬化是什么”文章的知識點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Docker虛擬化是什么”文章吧。
1.docker簡介
1.1虛擬化
1.1.1什么是虛擬化
在計(jì)算機(jī)中,虛擬化(英語:virtualization)是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源,如服務(wù)器、網(wǎng)絡(luò)、內(nèi)存及存儲等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來,打破實(shí)體結(jié)構(gòu)間的不可切割的障礙,使用戶可以比原本的組態(tài)更好的方式來應(yīng)用這些資源。這些資源的新虛擬部份是不受現(xiàn)有資源的架設(shè)方式,地域或物理組態(tài)所限制。一般所指的虛擬化資源包括計(jì)算能力和資料存儲。
在實(shí)際的生產(chǎn)環(huán)境中,虛擬化技術(shù)主要用來解決高性能的物理硬件產(chǎn)能過剩和老的舊的硬件產(chǎn)能過低的重組重用,透明化底層物理硬件,從而最大化的利用物理硬件對資源充分利用虛擬化技術(shù)種類很多,例如:軟件虛擬化、硬件虛擬化、內(nèi)存虛擬化、網(wǎng)絡(luò)虛擬化(vip)、桌面虛擬化、服務(wù)虛擬化、虛擬機(jī)等等。
1.1.2虛擬化種類
(1)全虛擬化架構(gòu) 虛擬硬件 —>虛擬操作系統(tǒng)
虛擬機(jī)的監(jiān)視器(hypervisor)是類似于用戶的應(yīng)用程序運(yùn)行在主機(jī)的os之上,如vmware的workstation,這種虛擬化產(chǎn)品提供了虛擬的硬件。
(2)os層虛擬化架構(gòu): 不對硬件進(jìn)行虛擬化,相同內(nèi)核操作系統(tǒng)
(3)硬件層虛擬化
硬件層的虛擬化具有高性能和隔離性,因?yàn)閔ypervisor直接在硬件上運(yùn)行,有利于控制vm的os訪問硬件資源,使用這種解決方案的產(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ù)器上的所有物理設(shè)備和虛擬機(jī),也叫虛擬機(jī)監(jiān)視器(virtual machine monitor,vmm)。
hypervisor是所有虛擬化技術(shù)的核心。當(dāng)服務(wù)器啟動并執(zhí)行hypervisor時(shí),它會給每一臺虛擬機(jī)分配適量的內(nèi)存、cpu、網(wǎng)絡(luò)和磁盤,并加載所有虛擬機(jī)的客戶操作系統(tǒng)。宿主機(jī)
hypervisor是所有虛擬化技術(shù)的核心,軟硬件架構(gòu)和管理更高效、更靈活,硬件的效能能夠更好地發(fā)揮出來。常見的產(chǎn)品有:vmware、kvm、xen等等。openstack
1.2什么是docker
1.2.1容器技術(shù) 類似os層虛擬化架構(gòu):
在計(jì)算機(jī)的世界中,容器擁有一段漫長且傳奇的歷史。容器與管理程序虛擬化(hypervisor virtualization,hv)有所不同,管理程序虛擬化通過中間層將一臺或者多臺獨(dú)立的機(jī)器虛擬運(yùn)行與物理硬件之上,而容器則是直接運(yùn)行在操作系統(tǒng)內(nèi)核之上的用戶空間。因此,容器虛擬化也被稱為“操作系統(tǒng)級虛擬化”,容器技術(shù)可以讓多個(gè)獨(dú)立的用戶空間運(yùn)行在同一臺宿主機(jī)上。
由于“客居”于操作系統(tǒng),容器只能運(yùn)行與底層宿主機(jī)相同或者相似的操作系統(tǒng),這看起來并不是非常靈活。例如:可以在ubuntu服務(wù)中運(yùn)行redhat enterprise linux,但無法再ubuntu服務(wù)器上運(yùn)行microsoft windows。
相對于徹底隔離的管理程序虛擬化,容器被認(rèn)為是不安全的。而反對這一觀點(diǎn)的人則認(rèn)為,由于虛擬容器所虛擬的是一個(gè)完整的操作系統(tǒng),這無疑增大了攻擊范圍,而且還要考慮管理程序?qū)訚撛诘谋┞讹L(fēng)險(xiǎn)。
盡管有諸多局限性,容器還是被廣泛部署于各種各樣的應(yīng)用場合。在超大規(guī)模的多租戶服務(wù)部署、輕量級沙盒以及對安全要求不太高的隔離環(huán)境中,容器技術(shù)非常流行。最常見的一個(gè)例子就是“權(quán)限隔離監(jiān)牢”(chroot jail),它創(chuàng)建一個(gè)隔離的目錄環(huán)境來運(yùn)行進(jìn)程。如果權(quán)限隔離監(jiān)牢正在運(yùn)行的進(jìn)程被入侵者攻破,入侵者便會發(fā)現(xiàn)自己“身陷囹圄”,因?yàn)闄?quán)限不足被困在容器所創(chuàng)建的目錄中,無法對宿主機(jī)進(jìn)一步破壞。
最新的容器技術(shù)引入了openvz、solaris zones以及l(fā)inux容器(lxc)。使用這些新技術(shù),容器不在僅僅是一個(gè)單純的運(yùn)行環(huán)境。在自己的權(quán)限類內(nèi),容器更像是一個(gè)完整的宿主機(jī)。對docker來說,它得益于現(xiàn)代linux特性,如控件組(control group)、命名空間(namespace)技術(shù),容器和宿主機(jī)之間的隔離更加徹底,容器有獨(dú)立的網(wǎng)絡(luò)和存儲棧,還擁有自己的資源管理能力,使得同一臺宿主機(jī)中的多個(gè)容器可以友好的共存。
容器被認(rèn)為是精益技術(shù),因?yàn)槿萜餍枰拈_銷有限。和傳統(tǒng)虛擬化以及半虛擬化相比,容器不需要模擬層(emulation layer)和管理層(hypervisor layer),而是使用操作系統(tǒng)的系統(tǒng)調(diào)用接口。這降低了運(yùn)行單個(gè)容器所需的開銷,也使得宿主機(jī)中可以運(yùn)行更多的容器。
盡管有著光輝的歷史,容器仍未得到廣泛的認(rèn)可。一個(gè)很重要的原因就是容器技術(shù)的復(fù)雜性:容器本身就比較復(fù)雜,不易安裝,管理和自動化也很困難。而docker就是為了改變這一切而生的。
1.2.2容器與虛擬機(jī)比較
(1)本質(zhì)上的區(qū)別
(2)使用上的區(qū)別
1.2.3 docker特點(diǎn)
(1)上手快。
用戶只需要幾分鐘,就可以把自己的程序“docker化”。docker依賴于“寫時(shí)復(fù)制”(copy-on-write)模型,使修改應(yīng)用程序也非常迅速,可以說達(dá)到“隨心所致,代碼即改”的境界。
隨后,就可以創(chuàng)建容器來運(yùn)行應(yīng)用程序了。大多數(shù)docker容器只需要不到1秒中即可啟動。由于去除了管理程序的開銷,docker容器擁有很高的性能,同時(shí)同一臺宿主機(jī)中也可以運(yùn)行更多的容器,使用戶盡可能的充分利用系統(tǒng)資源。
(2)職責(zé)的邏輯分類
使用docker,開發(fā)人員只需要關(guān)心容器中運(yùn)行的應(yīng)用程序,而運(yùn)維人員只需要關(guān)心如何管理容器。docker設(shè)計(jì)的目的就是要加強(qiáng)開發(fā)人員寫代碼的開發(fā)環(huán)境與應(yīng)用程序要部署的生產(chǎn)環(huán)境一致性。從而降低那種“開發(fā)時(shí)一切正常,肯定是運(yùn)維的問題(測試環(huán)境都是正常的,上線后出了問題就歸結(jié)為肯定是運(yùn)維的問題)”
(3)快速高效的開發(fā)生命周期
docker的目標(biāo)之一就是縮短代碼從開發(fā)、測試到部署、上線運(yùn)行的周期,讓你的應(yīng)用程序具備可移植性,易于構(gòu)建,并易于協(xié)作。(通俗一點(diǎn)說,docker就像一個(gè)盒子,里面可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走,而不需要從該盒子中一件件的取。)
(4)鼓勵使用面向服務(wù)的架構(gòu)
docker還鼓勵面向服務(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)用程序都變得非常簡單,同時(shí)也提高了程序的內(nèi)省性。(當(dāng)然,可以在一個(gè)容器中運(yùn)行多個(gè)應(yīng)用程序)
1.3 docker組件
1.3.1 docker客戶端和服務(wù)器
docker是一個(gè)客戶端-服務(wù)器(c/s)架構(gòu)程序。docker客戶端只需要向docker服務(wù)器或者守護(hù)進(jìn)程發(fā)出請求,服務(wù)器或者守護(hù)進(jìn)程將完成所有工作并返回結(jié)果。docker提供了一個(gè)命令行工具docker以及一整套restful api。你可以在同一臺宿主機(jī)上運(yùn)行docker守護(hù)進(jìn)程和客戶端,也可以從本地的docker客戶端連接到運(yùn)行在另一臺宿主機(jī)上的遠(yuǎn)程docker守護(hù)進(jìn)程。
1.3.2 docker鏡像
鏡像是構(gòu)建docker的基石。用戶基于鏡像來運(yùn)行自己的容器。鏡像也是docker生命周期中的“構(gòu)建”部分。鏡像是基于聯(lián)合文件系統(tǒng)的一種層式結(jié)構(gòu),由一系列指令一步一步構(gòu)建出來。例如:
添加一個(gè)文件;
執(zhí)行一個(gè)命令;
打開一個(gè)窗口。
也可以將鏡像當(dāng)作容器的“源代碼”。鏡像體積很小,非常“便攜”,易于分享、存儲和更新。
1.3.3 registry(注冊中心)
docker用registry來保存用戶構(gòu)建的鏡像。registry分為公共和私有兩種。docker公司運(yùn)營公共的registry叫做docker hub。用戶可以在docker hub注冊賬號,分享并保存自己的鏡像(說明:在docker hub下載鏡像巨慢,可以自己構(gòu)建私有的registry)。
1.3.4 docker容器
docker可以幫助你構(gòu)建和部署容器,你只需要把自己的應(yīng)用程序或者服務(wù)打包放進(jìn)容器即可。容器是基于鏡像啟動起來的,容器中可以運(yùn)行一個(gè)或多個(gè)進(jìn)程。我們可以認(rèn)為,鏡像是docker生命周期中的構(gòu)建或者打包階段,而容器則是啟動或者執(zhí)行階段。 容器基于鏡像啟動,一旦容器啟動完成后,我們就可以登錄到容器中安裝自己需要的軟件或者服務(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ù)庫,或者是應(yīng)用程序服務(wù)器什么的。所有的容器都按照相同的方式將內(nèi)容“裝載”進(jìn)去。
docker也不關(guān)心你要把容器運(yùn)到何方:我們可以在自己的筆記本中構(gòu)建容器,上傳到registry,然后下載到一個(gè)物理的或者虛擬的服務(wù)器來測試,在把容器部署到具體的主機(jī)中。像標(biāo)準(zhǔn)集裝箱一樣,docker容器方便替換,可以疊加,易于分發(fā),并且盡量通用。
使用docker,我們可以快速的構(gòu)建一個(gè)應(yīng)用程序服務(wù)器、一個(gè)消息總線、一套實(shí)用工具、一個(gè)持續(xù)集成(ci)測試環(huán)境或者任意一種應(yīng)用程序、服務(wù)或工具。我們可以在本地構(gòu)建一個(gè)完整的測試環(huán)境,也可以為生產(chǎn)或開發(fā)快速復(fù)制一套復(fù)雜的應(yīng)用程序棧。
以上就是關(guān)于“Docker虛擬化是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。