簡介
Docker是一個開源的引擎崩泡,可以輕松的為任何應用創(chuàng)建一個輕量級的壤靶、可移植的丁逝、自給自足的容器。開發(fā)者在筆記本上編譯測試通過的容器可以批量地在生產環(huán)境中部署淘菩,包括VMs(虛擬機)遵班、bare metal, OpenStack 集群和其他的基礎應用平臺潮改。
如果會用Python的virtualenv费奸,那么就容易理解Docker。
Docker初始目的不是虛擬化进陡,但是可以作為虛擬化技術。
virtualenv只是針對python的隔離工具微服,是借助語言層面的虛擬機來實現(xiàn)的趾疚,不具有通用性缨历。Docker是更底層的虛擬化技術,它是進程級的糙麦,也就是說不管什么語言編寫的程序都會得到相應的服務辛孵,主要依賴于內核的CGroup, Namespace, UnionFS。
Docker的圖標是搬運箱赡磅,我們想象下魄缚,許多工人在搬運貨物,集裝箱出現(xiàn)后焚廊,碼頭上看到更多的不是工人冶匹,而是集裝箱。集裝箱的搬運模式更加單一咆瘟,更加高效嚼隘,還有其他的好處。
貨物多打包在集裝箱里面袒餐,可以防止貨物之間相互影響飞蛹。并且到了另外的一個碼頭需要運轉的話,有了集裝箱后灸眼,直接把它送到另外一個容器內即可卧檐,完全可以保證里面的貨物是整體的搬遷,并且不會損壞貨物本身焰宣。
Docker是一個開源的應用容器引擎霉囚,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux機器上宛徊,也可以實現(xiàn)虛擬化佛嬉。
容器是完全使用沙箱機制,相互之間不會有任何接口(類似iPhone的app)闸天。幾乎沒有性能開銷暖呕,可以容易地在機器和書記中心運行。最重要的是苞氮,他們不依賴于任何語言湾揽,框架或者包括系統(tǒng)。
Docker是最近幾年最火爆的技術之一笼吟。
Docker自開源后受到廣泛的關注和討論库物,以至于dotCloud公司后來改名為Docker Inc。Redhat已經(jīng)在其RHEL6.5中集中支持Docker:Google也在其PaaS產品中廣泛應用贷帮。
Docker項目的目標是實現(xiàn)輕量級的操作系統(tǒng)虛擬化解決方案戚揭。Docker的基礎是Linux容器(LXC)等技術。在LXC的基礎上Docker進行了進一步的封裝撵枢,讓用戶不需要去關心容器的管理民晒,使得操作更加簡便精居。用戶操作Docker的容器就像操作一個快速輕量級的虛擬機一樣簡單。
Docker使用場景
1.web應用的自動化打包和發(fā)布
2.自動化測試和持續(xù)集成潜必、發(fā)布
3.在服務型環(huán)境中部署和調整數(shù)據(jù)庫或其他的后臺應用
4.從頭編譯或者擴展現(xiàn)有的OpenShift或Cloud Foundry平臺來搭建自己的PaaS環(huán)境靴姿。
通俗地理解Docker: https://www.zhihu.com/question/28300645
eg.
1)公司開發(fā)人員,開發(fā)web系統(tǒng)磁滚,web系統(tǒng)部署到Linux服務器佛吓,如果部署時間1-2天,調試完畢垂攘,web系統(tǒng)對外發(fā)布维雇;
2)需要把web系統(tǒng)/APP應用各種代碼,軟件搜贤,依賴環(huán)境谆沃,部署線上Linux服務器,Docker技術仪芒,將web系統(tǒng)打包(重點是把環(huán)境)為鏡像唁影,類似iso鏡像文件,移植到其他Linux系統(tǒng)掂名;
虛擬化
1.虛擬化概念:
通俗地說据沈,虛擬化就是把物理資源轉變?yōu)檫壿嬌峡梢怨芾淼馁Y源,以打破物理結構間的壁壘饺蔑,計算元件運行在虛擬的基礎上而不是真實的基礎上锌介,可以擴大硬件的容量,簡化軟件的重新配置過程猾警。
允許一個平臺上面同時運行多個操作系統(tǒng)孔祸,并且應用程序都可以在相互獨立的空間內運行,而不相互影響发皿,從而顯著提高計算機的工作效率崔慧,是一個為了簡化管理,優(yōu)化資源的解決方案穴墅。(一變多惶室,硬件利用效率提高)
目前主流的虛擬化技術有:KVM,Xen玄货,VMWare Esxi, VirtualBox皇钞,Docker,虛擬化技術也越來越廣泛地應用在企業(yè)中松捉,例如 Taobao夹界,Google等。
一個硬件設備平臺隘世,基于平臺劃分更多的虛擬資源可柿,單臺物理機虛擬更多的虛擬機也拜。
虛擬化技術計算元件,資源申請調度到其他硬件服務器趾痘;
騰訊云,阿里云的虛擬化蔓钟,客戶提交CPU永票,內存,硬盤滥沫,網(wǎng)卡侣集,帶寬需求,提交到后端硬件服務器兰绣,通過計算元件實現(xiàn)資源調度世分。
比如:如果不用調度方式去調度,64C的cpu只能虛擬出16個4C的cpu缀辩。使用了調度方式臭埋,就可以實現(xiàn)更多個的4C,實現(xiàn)資源分配臀玄;
2.虛擬化原理
虛擬化解決方案的底層是要進行虛擬化的物理機器瓢阴,這臺機器可能直接支持虛擬胡啊,也可能不會直接支持虛擬化健无;那么就需要系統(tǒng)管理程序層的支持荣恐。系統(tǒng)管理程序(Virtual machine monitor),或者稱為VMM累贤,可以看做是平臺硬件和操作系統(tǒng)的抽象畫叠穆。在某些情況中,這個系統(tǒng)管理程序就是一個操作系統(tǒng)臼膏;此時硼被,它就稱為主機操作系統(tǒng)。
3.虛擬化分層抽象:
1)完全虛擬化技術:實際上是通過軟件實現(xiàn)對操作系統(tǒng)的資源再分配讶请,比較成熟祷嘶,例如我們的KVM,VirtualBox等夺溢。
2)半虛擬化技術:則是通過代碼修改已有的系統(tǒng)论巍,形成一種新的可虛擬化的系統(tǒng),形成一種新的可虛擬化的系統(tǒng)风响,調用硬件資源去安裝多個系統(tǒng)嘉汰,整體速度上相對高一點,代表產品有Xen状勤。
3)Docker虛擬化(介于完全虛擬化鞋怀,半虛擬化之間)双泪,輕量級虛擬化。
Docker LXC & Cgroup
Docker最早為LXC+AUFS組合密似,Docker0.9.0版本開始引入libcontainer焙矛,可以作為LXC的替代品。其中LXC負責資源管理残腌。
AUFS負責鏡像管理村斟,而LXC包括cgroup,namespace抛猫,chroot等組件蟆盹,并通過cgroup進行資源管理。
從資源管理看闺金,Docker, LXC, Cgroup三者的關系是:Cgroup在最底層落實資源管理逾滥,LXC在cgroup上封裝一層,Docker又在LXC封裝了一層败匹,要想學好Docker寨昙,需要了解負責資源管理的CGroup和LXC。
Docker和LXC哎壳, cgroup, AUFS毅待,chroot等之間的關系:
所以,Docker不是一個新的革命性的技術归榕,而是基于Linux的 LXC的基礎上進行發(fā)展的尸红。LXC技術作用是進行資源隔離。
linux本身每個進程使用的資源都是相互隔離的刹泄,比如內存等外里,那么為何還需要Docker呢,因為可以更加進一步地去實現(xiàn)管理特石。
Cgroup是control groups的縮寫盅蝗,是Linux內核提供的一種可以限制,記錄姆蘸,隔離進程組(process groups)所使用的物理資源(如:CPU墩莫,Memory,IO等)的機制逞敷。
最初由Google的工程師提出狂秦,后來被整合進Linux內核。Cgroups也是LXCWie實現(xiàn)虛擬化所使用的資源管理手段推捐,可以說沒有Cgroups就沒有LXC裂问,就沒有Docker。
Cgroups最初的目的是為資源管理提供的一個統(tǒng)一的框架,既整合現(xiàn)有的Cpuset等子系統(tǒng)堪簿,也為未來開發(fā)新的子系統(tǒng)提供接口∪現(xiàn)在的Cgroups適用于多種應用場景,從單個進程的資源控制椭更,到實現(xiàn)操作系統(tǒng)層次的虛擬化(OS Level Virtualization)哪审。
Linux Containers容器(LXC)可以提供輕量級的虛擬化,以便隔離進程和資源虑瀑,而且不需要提供指令解析機制以及全虛擬化的其他復雜性协饲。容器有效地將由單個操作系統(tǒng)管理的資源劃分到孤立的組中,以更好地在孤立的組之間平衡有沖突的資源使用需求缴川。
LXC建立在CGroup基礎上,我們可以粗略的認為LXC = Cgroup + namespace + Chroot + veth + 用戶態(tài)控制腳本描馅。LXC利用內核的新特性(CGroup)來提供用戶空間的對象把夸,用來保證資源的隔離和對于應用或者系統(tǒng)的資源控制。
典型的Linux文件系統(tǒng)由bootfs和rootfs兩部分組成铭污,bootfs(boot file system)主要包含bootloader和kernel恋日,bootloader主要是引導加載kernel,當kernel被加載到內存中后bootfs就被umount嘹狞,rootfs(root file system)包含的就是典型Linux系統(tǒng)中的/dev岂膳, /proc, /bin, /etc
等目錄和文件。
Docker容器的文件系統(tǒng)最早就是建立在Aufs基礎上的磅网,Aufs(Another Union FIle System)是一種Union FS谈截,簡單來說就是支持將不同的目錄掛載到統(tǒng)一個虛擬文件系統(tǒng)下,并實現(xiàn)一種layer的概念涧偷。
由于Aufs未能加入到Linux內核簸喂,考慮到兼容性問題,加入了Devicemapper的支持燎潮。Docker目前默認運行在Devicemapper基礎上喻鳄。
Aufs將掛載到統(tǒng)一虛擬文件系統(tǒng)下的多個目錄分別設置成read-only,read-write确封,以及whiteout-able權限除呵,對read-only目錄只能讀,而寫操作只能實施在read-write目錄中爪喘。重點在于... (很多颜曾,教程中沒講下去了)
Docker虛擬化技術實現(xiàn)基礎
鏡像:模板,類似常見的ISO鏡像腥放,Docker虛擬化基于系統(tǒng)泛啸、程序,靜態(tài)的,不能修改候址,iso文件不能直接修改吕粹;
容器:稱為Docker虛擬機,基于鏡像運行的實體岗仑。使用鏡像常見的應用或者系統(tǒng)匹耕,我們稱為容器;
倉庫:倉庫是用于存放鏡像的地方荠雕,分為:公共倉庫稳其、私有倉庫;
VM 和 Docker的區(qū)別
VM虛擬化方案:
Docker的虛擬化方案:
Docker虛擬化有三個概念需要理解炸卑,分別是:鏡像既鞠,容器,倉庫盖文。在上面有講解嘱蛋。
分析上面的兩張圖的不同:
1.Docker不會在做一個Guest OS。
2.注意上面的Docker虛擬化技術圖中黃色是一個Docker容器(可包含庫和app)五续。
所以Docker虛擬化技術與傳統(tǒng)虛擬化技術是不一樣的洒敏。