轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/d219f35d37e1
做開(kāi)發(fā)的基本都聽(tīng)說(shuō)過(guò)沙盒 (Sandbox) 和虛擬機(jī) (Virtual Machine早芭,簡(jiǎn)稱(chēng) VM) ,如今容器技術(shù)很火恬叹,其中以 docker 最受大家歡迎。作為一種集群管理工具同眯,K8s 最近也是火的不要不要的绽昼。 我們經(jīng)常會(huì)講 docker 和 K8s 聯(lián)系起來(lái),那么兩者之間又存在什么關(guān)聯(lián)呢须蜗?
一硅确、為什么引入Sandbox 和 VM?
- 引入 Sandbox 目的:從資源利用的角度看明肮,如何
限制一個(gè)進(jìn)程或者一組進(jìn)程可以使用哪些資源
是一個(gè)亟待解決的問(wèn)題疏魏,即隔離
。Sandbox將一個(gè)應(yīng)用程序或者一組應(yīng)用程序隔離在一個(gè)受限的環(huán)境中晤愧,使其無(wú)法逃逸大莫; - 引入 VM 目的 :比如開(kāi)發(fā)人員用的電腦??是 Windows OS,但是開(kāi)發(fā)需要用到 Linux 操作系統(tǒng)官份,這時(shí)候就可以在 Windows OS 上安裝一個(gè) VM 來(lái)虛擬出 Linux 環(huán)境只厘。
二、Sandbox舅巷、VM羔味、容器、Docker 之間的關(guān)聯(lián)
首先Sandbox 和 VM
都是屬于虛擬技術(shù)
钠右,用來(lái)虛擬軟件運(yùn)行環(huán)境并具有資源隔離的功能赋元。Sandbox 比較“輕”(只需要虛擬出一個(gè)小的環(huán)境)且一旦退出就釋放之前占用的資源;VM 則比較重(虛擬出整個(gè)操作系統(tǒng),相當(dāng)于子電腦)搁凸。關(guān)于 Sandbox 和 VM 的區(qū)別可以參考博客:http://www.reibang.com/p/6acdfd60b014媚值。
容器是屬于 Sandbox 的一種。
顧名思義护糖,沙盒就是能夠像一個(gè)集裝箱一樣褥芒,把你的應(yīng)用“裝”起來(lái)的技術(shù)。這樣嫡良,應(yīng)用與應(yīng)用之間锰扶,就因?yàn)橛辛诉吔缍恢劣谙嗷ジ蓴_;而被裝進(jìn)集裝箱的應(yīng)用寝受,也可以被方便地搬來(lái)搬去坷牛。容器技術(shù)的核心功能
,就是通過(guò)約束和修改進(jìn)程的動(dòng)態(tài)表現(xiàn)
很澄,從而為其創(chuàng)造出一個(gè)“邊界”
京闰。正是因?yàn)檫@個(gè)邊界才會(huì)讓容器里面的程序看不到宿主機(jī)上其他的程序從而給程序一種它就是在一個(gè)獨(dú)立的操作系統(tǒng)上的假象。容器具有如下幾個(gè)優(yōu)點(diǎn):
- 啟動(dòng)速度快痴怨;
- 對(duì)硬件資源利用率高忙干,一臺(tái)主機(jī)甚至可以啟用上千個(gè) Docker器予,且用完即釋放資源浪藻;
- 占用空間小;
Docker 是一種輕量級(jí)的虛擬化
技術(shù),即容器技術(shù)乾翔。隨著 Docker 的開(kāi)源爱葵,docker 憑借其“輕”的特點(diǎn)得到迅速的普及。
這三個(gè)優(yōu)點(diǎn)恰是 VM 的缺點(diǎn)反浓。
三萌丈、Docker 的功能和特點(diǎn)
Docker 原意是指處理碼頭集裝箱的工人。
首先需要注意的是雷则,Docker 本身不是容器
辆雾,而是一個(gè)開(kāi)源的應(yīng)用容器引擎
。Docker 讓開(kāi)發(fā)者可以以統(tǒng)一的方式 打包
他們的應(yīng)用以及依賴(lài)包
到一個(gè)可移植的容器
中月劈,然后發(fā)布
到任何安裝了docker引擎的服務(wù)器上
(包括流行的Linux機(jī)器度迂、windows機(jī)器),也可以實(shí)現(xiàn)虛擬化猜揪。從這個(gè)描述可以看出 Docker 的幾種常用任務(wù):
- 創(chuàng)建容器(自己創(chuàng)建惭墓、或者從容器倉(cāng)庫(kù)中拉取)而姐;
- 打包容器(將應(yīng)用及其依賴(lài)打包成一個(gè)鏡像)腊凶;
- 發(fā)布容器(發(fā)布在另一個(gè) docker 引擎上運(yùn)行)。
Docker 的兩句口號(hào)很準(zhǔn)確地描述了其功能:
1. Build, ship and run
顧名思義,創(chuàng)建钧萍、運(yùn)輸和運(yùn)行褐缠。
舉個(gè)例子來(lái)理解:比如說(shuō)我在 A 地建好了一個(gè)廠區(qū),該廠區(qū)主要的是車(chē)間划煮,其次還有一些配套的生活設(shè)施(比如食堂送丰、超市、宿舍弛秋、水電等)∑黪铮現(xiàn)在我要將廠遷到 B 地,按照常規(guī)思路就是把 A 地的車(chē)間拆了運(yùn)到 B 地重新組裝蟹略、并在 B 地建好配套的生活設(shè)施登失,工程量明顯很大。假設(shè)現(xiàn)在有一種魔法能夠在A地將車(chē)間及其配套的生活設(shè)施復(fù)制一份并打包成一個(gè)鏡像 image(文件)
挖炬,然后將該鏡像遷移到 B 地揽浙,這樣在B地馬上就能夠投入使用,省去了拆機(jī)意敛、重裝以及搭建配套生活設(shè)施的工作馅巷,非常方便快捷。
現(xiàn)在我們將車(chē)間類(lèi)比成一個(gè)application
草姻,將配套的生活設(shè)施類(lèi)比成依賴(lài)
钓猬,那么docker 就是這種魔法
。
2. Build once, run anywhere
顧名思義撩独,一次創(chuàng)建敞曹、隨地運(yùn)行。
我們知道車(chē)間是用于工業(yè)生產(chǎn)的
综膀,即一個(gè)application澳迫。在這個(gè)世界,還存在很多其他的application剧劝,比如學(xué)校橄登、醫(yī)院、寫(xiě)字樓讥此、商場(chǎng)拢锹、體育場(chǎng)等,它們各自負(fù)責(zé)不同的用途暂论。假設(shè)這些 application 都是能夠共享的面褐,那么這個(gè)效率將會(huì)很高,比如國(guó)家A需要用到體育館取胎,可以從國(guó)家B復(fù)制一個(gè)過(guò)來(lái)展哭;國(guó)家B需要用到學(xué)校湃窍,可以從國(guó)家A復(fù)制一個(gè)過(guò)來(lái)。Docker 使用的就是這種理念匪傍,Docker 中包含三個(gè)核心部分:
- 鏡像文件(image):一個(gè) application 打包成一個(gè)鏡像文件您市;
- 容器(Container):一個(gè) application 運(yùn)行在一個(gè)容器中,容器之間互不影響役衡;
- 鏡像倉(cāng)庫(kù)(Repository):存儲(chǔ)鏡像文件的倉(cāng)庫(kù)茵休,就像是圖書(shū)館。
鏡像倉(cāng)庫(kù)(Repository)可以是私有的(比如本地機(jī)器的 Docker repository)手蝎,也可以是公有的(比如 Docker 官方提供的Docker Hub榕莺、第三方的 Hub)。負(fù)責(zé)管理鏡像倉(cāng)庫(kù)(Repository)的是 Docker Registry 服務(wù)
(就像是圖書(shū)館管理員)棵介。Docker 官方提供的 Docker Hub 對(duì)于鏡像來(lái)源有著嚴(yán)格的把控钉鸯,有很多高質(zhì)量的 application 鏡像,也是開(kāi)發(fā)人員用的最多的public registry 服務(wù)邮辽。
四唠雕、使用 Kubernetes 管理 Docker
那么為什么需要 Kubernetes 呢?就在 Docker 容器技術(shù)被炒得熱火朝天之時(shí)吨述,大家發(fā)現(xiàn)岩睁,如果想要將 Docker 應(yīng)用于具體的業(yè)務(wù)實(shí)現(xiàn)(當(dāng)容器和服務(wù)器的數(shù)量達(dá)到一定規(guī)模
的時(shí)候,就會(huì)碰到管理的
問(wèn)題揣云,即如何有效管理大量的服務(wù)器和容器
捕儒,保證應(yīng)用的穩(wěn)定運(yùn)行、方便升級(jí)和故障的快速解決
)灵再,是存在困難的——編排肋层、管理和調(diào)度等各個(gè)方面都不容易
亿笤。于是就迫切需要一套容器編排工具
翎迁,能夠?qū)?Docker 和容器進(jìn)行更高級(jí)、靈活的管理
净薛。容器編排工具提供圖形化界面或者命令行來(lái)管理容器和服務(wù)器集群汪榔,提供容器配置、任務(wù)發(fā)布肃拜、服務(wù)發(fā)現(xiàn)痴腌、負(fù)載均衡、系統(tǒng)監(jiān)控和故障恢復(fù)燃领、聲明式系統(tǒng)配置以及有關(guān)容器部署和性能的規(guī)則和約束定義機(jī)制等士聪。
就在這個(gè)時(shí)候, Google開(kāi)發(fā)的Kubernetes 從眾多編排工具中脫穎而出
猛蔽,贏下了容器編排工具大戰(zhàn)剥悟。Kubernetes 是一種基于容器的集群管理平臺(tái)
灵寺。Kubernetes 是希臘語(yǔ),意為“舵手区岗、領(lǐng)航員”略板,大家都習(xí)慣將 Kubernetes 簡(jiǎn)稱(chēng)為K8s(ubernete 包含8個(gè)字母)。K8s 最初由 Google 創(chuàng)建而后加入 openstack 基金會(huì)并發(fā)布了 K8s V1.0慈缔。
五叮称、Docker Swarm V.S. Kubernetes
Docker 公司自己有一款名為 Docker Swarm的產(chǎn)品,它是一個(gè)容器集群和調(diào)度工具藐鹤,功能類(lèi)似于Kubernetes瓤檐。相比 Kubernetes,Swarm在集群搭建和使用上要相對(duì)簡(jiǎn)單一些娱节,學(xué)習(xí)和部署成本相對(duì)低一些距帅。較新版本的Docker已經(jīng)集成了Swarm。Swarm支持跨多個(gè)主機(jī)進(jìn)行編排括堤,管理較小規(guī)模的容器集群也綽綽有余碌秸,對(duì)于初學(xué)者也可以很快的部署和運(yùn)行。
六悄窃、總結(jié)
- Docker 容器技術(shù)主要作用是隔離讥电,通過(guò)對(duì)系統(tǒng)的關(guān)鍵資源的隔離,實(shí)現(xiàn)了
主機(jī)抽象
轧抗; - 容器集群和調(diào)度工具(比如 K8s 和 Docker Swarm)是在抽象主機(jī)基礎(chǔ)上恩敌,實(shí)現(xiàn)了
集群抽象
。
筆者水平有限横媚,如有錯(cuò)誤纠炮,敬請(qǐng)指正!
參考:
https://www.cnblogs.com/misswangxing/p/10669444.html
https://blog.csdn.net/fly910905/article/details/98962455