Docker--容器技術(shù)
用個(gè)類比來(lái)極簡(jiǎn)說(shuō)明一下:

一、物理機(jī)是這樣的
二、虛擬機(jī)是這樣的
三、容器是這樣的
什么是“容器”和“虛擬機(jī)”
容器和虛擬機(jī)它們的目的很相似:即將應(yīng)用程序和它的依賴放到一個(gè)可以在任何環(huán)境運(yùn)行的自足單元中。
此外,容器和虛擬機(jī)消除了對(duì)物理硬件的需求,從而在能源消耗和成本效益方面能讓我們更有效地使用計(jì)算資源,
容器和虛擬機(jī)的主要區(qū)別在于它們的架構(gòu)方式。讓我們繼續(xù)深入了解。
虛擬機(jī)
虛擬機(jī)在本質(zhì)上是對(duì)現(xiàn)實(shí)中計(jì)算機(jī)的仿真,它會(huì)像真實(shí)的計(jì)算機(jī)一樣執(zhí)行程序。使用?“hypervisor”?可以將虛擬機(jī)運(yùn)行于物理機(jī)上。hypervisor 可以在主機(jī)運(yùn)行,也可以在“裸機(jī)”上運(yùn)行。
讓我們來(lái)揭開(kāi)這些術(shù)語(yǔ)的面紗:
hypervisor(之后都以虛擬機(jī)管理程序稱呼)是能讓虛擬機(jī)在其上運(yùn)行的軟件,固件或者硬件。虛擬機(jī)管理程序本身會(huì)在物理計(jì)算機(jī)上運(yùn)行,稱為**“主機(jī)”**。主機(jī)為虛擬機(jī)提供資源,包括 RAM 和 CPU。這些資源在虛擬機(jī)之間被劃分并且可以根據(jù)需要進(jìn)行分配。所以如果一個(gè)虛擬機(jī)上運(yùn)行了資源占用更大的應(yīng)用程序,相較于其它運(yùn)行在同一個(gè)主機(jī)的虛擬機(jī)你可以給其分配更多的資源。
運(yùn)行在主機(jī)上的虛擬機(jī)(再次說(shuō)明,通過(guò)使用虛擬機(jī)管理程序)通常也被叫做“訪客機(jī)”。訪客機(jī)包含了應(yīng)用以及運(yùn)行這個(gè)應(yīng)用所需要的全部依賴(比如:系統(tǒng)二進(jìn)制文件和庫(kù))。它還帶有一個(gè)自己的完整虛擬化硬件棧,包括虛擬化的網(wǎng)絡(luò)適配器,儲(chǔ)存和 CPU-這意味著它還擁有自己成熟的整個(gè)訪客操作系統(tǒng)。從虛擬機(jī)內(nèi)部來(lái)看,訪客機(jī)的操作都認(rèn)為其使用的都是自己的專用資源。從外部來(lái)看,我們知道它是一個(gè)虛擬機(jī)-和其它虛擬機(jī)一起共享主機(jī)提供的資源。
就像前面所提到的,訪客機(jī)既可以運(yùn)行在托管的虛擬機(jī)管理程序上,也可以運(yùn)行在裸機(jī)虛擬機(jī)管理程序上。它們之間存在一些重要的差別。
首先,托管的虛擬化管理程序是在主機(jī)的操作系統(tǒng)上運(yùn)行。比如說(shuō),可以在一臺(tái)運(yùn)行 OSX 操作系統(tǒng)的計(jì)算機(jī)的系統(tǒng)上安裝虛擬機(jī)(例如:VirtualBox 或者 VMware Workstation 8)。虛擬機(jī)無(wú)法直接訪問(wèn)硬件,因此必須通過(guò)主機(jī)上運(yùn)行的操作系統(tǒng)訪問(wèn)(在我們的例子中,也就是 Mac 的 OSX 操作系統(tǒng))。
托管虛擬機(jī)管理程序的好處是底層硬件并不那么重要。主機(jī)的操作系統(tǒng)會(huì)負(fù)責(zé)硬件的驅(qū)動(dòng)而不需要管理程序參與。因此這種方式被認(rèn)為具備更好的“硬件兼容性”。在另一方面,在硬件和管理程序之間這個(gè)額外的附加層會(huì)產(chǎn)生更多的資源開(kāi)銷,這會(huì)降低虛擬機(jī)的性能。
裸機(jī)虛擬機(jī)管理程序通過(guò)直接在主機(jī)硬件上安裝和運(yùn)行來(lái)解決這個(gè)性能問(wèn)題。因?yàn)樗苯用鎸?duì)底層的硬件,所以并不需要運(yùn)行在主機(jī)的操作系統(tǒng)之上。在這種情況下,安裝在主機(jī)上第一個(gè)作為操作系統(tǒng)運(yùn)行的就是這個(gè)裸機(jī)虛擬機(jī)管理程序。與托管虛擬機(jī)管理程序不同,它有自己的設(shè)備驅(qū)動(dòng)直接與每個(gè)組件交互,以執(zhí)行任何 I/O,處理或特定于操作系統(tǒng)的任務(wù)。這樣可以獲得更好的性能,可伸縮性和穩(wěn)定性。這里的權(quán)衡在于其對(duì)硬件的兼容性有限,因?yàn)槁銠C(jī)虛擬機(jī)管理程序內(nèi)置的設(shè)備驅(qū)動(dòng)只有那么多。
在討論了虛擬機(jī)管理程序之后,你可能想知道為什么我們需要在虛擬機(jī)和主機(jī)之間這個(gè)額外的“虛擬機(jī)管理程序”層。
好吧,虛擬機(jī)管理程序在其中確實(shí)發(fā)揮了重要的作用,由于虛擬機(jī)擁有自己的虛擬操作系統(tǒng),管理程序?yàn)樘摂M機(jī)管理和執(zhí)行訪客操作系統(tǒng)提供了一個(gè)平臺(tái)。它允許主機(jī)與作為客戶端運(yùn)行的虛擬機(jī)之間共享其資源。
虛擬機(jī)圖示
正如你可以在圖示中所看到的,VMS 會(huì)為每個(gè)新的虛擬機(jī)打包虛擬硬件,一個(gè)內(nèi)核(即操作系統(tǒng))和用戶空間。
容器
與提供硬件虛擬化的虛擬機(jī)不同,容器通過(guò)抽象“用戶空間”來(lái)提供操作系統(tǒng)級(jí)別的虛擬化。當(dāng)我們?cè)斀馊萜鬟@個(gè)術(shù)語(yǔ)的時(shí)候你就會(huì)明白我的意思。
從所有的意圖和目的來(lái)看,容器看起來(lái)就像一個(gè)虛擬機(jī)。比如說(shuō),它們有執(zhí)行進(jìn)程的私有空間,可以使用 root 權(quán)限執(zhí)行命令,具有專有的網(wǎng)絡(luò)接口和 IP 地址,允許自定義路由和 iptable 規(guī)則,可以掛載文件系統(tǒng)等。
容器和虛擬機(jī)之間的一個(gè)重要區(qū)別在于容器和其它容器共享主機(jī)系統(tǒng)的內(nèi)核。
容器圖示
這圖表明容器只會(huì)打包用戶空間,而不是像虛擬機(jī)那樣打包內(nèi)核或虛擬硬件。每個(gè)容器都有自己獨(dú)立的用戶空間從而可以讓多個(gè)容器在單個(gè)主機(jī)上運(yùn)行。我們可以看到所有操作系統(tǒng)級(jí)別的體系架構(gòu)是所有容器共享的。要從頭開(kāi)始創(chuàng)建的部分只有 bins 和 libs 目錄。這就是容器如此輕巧的原因。
docker 是從哪來(lái)的?
docker 是基于 Linux 容器技術(shù)的開(kāi)源項(xiàng)目。它使用 Luinux 的內(nèi)核功能(如命名空間和控制組)在操作系統(tǒng)上創(chuàng)建容器。
容器已經(jīng)遠(yuǎn)遠(yuǎn)不是一個(gè)新技術(shù):Google 已經(jīng)使用他們自己的容器技術(shù)好多年了。其它的容器技術(shù)包括 Solaris Zones、BSD jails 和 LXC 也已經(jīng)存在好多年。
那么為啥 Docker 會(huì)突然取得成功呢?
使用簡(jiǎn)單:Docker 使得任何人(開(kāi)發(fā)人員,運(yùn)維,架構(gòu)師和其他人)都可以更輕松的利用容器的優(yōu)勢(shì)來(lái)快速構(gòu)建和測(cè)試可移植的應(yīng)用程序。它可以讓任何人在他們的筆記本電腦上打包應(yīng)用程序,不需要任何修改就可以讓應(yīng)用運(yùn)行在公有云,私有云甚至裸機(jī)上。Docker 的口頭禪是:“一次構(gòu)建,處處運(yùn)行”。
速度:Docker 容器非常輕量級(jí)和快速。因?yàn)槿萜髦皇沁\(yùn)行在內(nèi)核上的沙盒環(huán)境,因此它們占用的資源更少。與可能需要更多時(shí)間來(lái)創(chuàng)建的虛擬機(jī)相比,你可以在幾秒鐘內(nèi)創(chuàng)建一個(gè) Docker 容器,因?yàn)樘摂M機(jī)每次都必須啟動(dòng)一個(gè)完整的操作系統(tǒng)。
Docker Hub:Docker 用戶也可以從日益豐富的 Docker Hub 生態(tài)中受益,你可以把 Docker Hub 看作是 “Docker 鏡像的應(yīng)用商店”。Docker Hub 擁有數(shù)萬(wàn)個(gè)由社區(qū)構(gòu)建的公共鏡像,這些鏡像都是隨時(shí)可用的。在其中搜索符合你需求的鏡像非常容易,你只需要準(zhǔn)備拉取鏡像而且?guī)缀醪恍枰魏涡薷摹?/p>
模塊化和可擴(kuò)展性:Docker 可以讓你輕松地把應(yīng)用程序按功能拆分為單個(gè)獨(dú)立的容器。比如說(shuō),你的 Postgre 數(shù)據(jù)庫(kù)可以運(yùn)行在一個(gè)容器中,Redis 服務(wù)運(yùn)行在另一個(gè)容器中,而 Node.js 應(yīng)用運(yùn)行在另一個(gè)容器中。使用 Docker,將這個(gè)容器鏈接在一起以創(chuàng)建你的應(yīng)用程序?qū)?huì)變得更簡(jiǎn)單,同時(shí)在將來(lái)可以很輕松地?cái)U(kuò)展和更新單獨(dú)的組件。最后但并不重要的是,有誰(shuí)不喜歡 Docker 的鯨魚(yú)(Docker 的標(biāo)志)呢?:)
Windows 容器 Docker 容器服務(wù)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。