Docker的介紹

Docker

1. 虛擬化

1)什么是虛擬化

在計算機(jī)中,虛擬化(英語:Virtualization)是一種資源管理技術(shù)茂翔,是將計算機(jī)的各種 實體資源,如服務(wù)器履腋、網(wǎng)絡(luò)珊燎、內(nèi)存及存儲等,予以抽象遵湖、轉(zhuǎn)換后呈現(xiàn)出來悔政,打破實體結(jié)構(gòu)間 的不可切割的障礙,使用戶可以比原本的組態(tài)更好的方式來應(yīng)用這些資源延旧。這些資源的新虛 擬部份是不受現(xiàn)有資源的架設(shè)方式谋国,地域或物理組態(tài)所限制。一般所指的虛擬化資源包括計 算能力和資料存儲迁沫。

在實際的生產(chǎn)環(huán)境中芦瘾,虛擬化技術(shù)主要用來解決高性能的物理硬件產(chǎn)能過剩和老的舊的 硬件產(chǎn)能過低的重組重用,透明化底層物理硬件集畅,從而最大化的利用物理硬件 對資源充 分利用

虛擬化技術(shù)種類很多近弟,例如:軟件虛擬化、硬件虛擬化挺智、內(nèi)存虛擬化、網(wǎng)絡(luò)虛擬化(vip)逃贝、 桌面虛擬化谣辞、服務(wù)虛擬化、虛擬機(jī)等等沐扳。

2) 虛擬化種類
  1. 全虛擬化架構(gòu)

虛擬機(jī)的監(jiān)視器(hypervisor)是類似于用戶的應(yīng)用程序運行在主機(jī)的 OS 之上泥从,如 VMware 的 workstation,這種虛擬化產(chǎn)品提供了虛擬的硬件沪摄。

![OS層虛擬化.png](https://upload-images.jianshu.io/upload_images/8572700-86ed8c89481f1f29.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. OS層虛擬化架構(gòu)

    ![
    OS層虛擬化.png
  1. 硬件層虛擬化
硬件虛擬化.png

硬件層的虛擬化具有高性能和隔離性躯嫉,因為 hypervisor 直接在硬件上運行纱烘,有利于控制 VM 的 OS 訪問硬件資源,使用這種解決方案的產(chǎn)品有 VMware ESXi 和 Xen server

Hypervisor 是一種運行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個操作系 統(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 時蜒谤,它會給每一 臺虛擬機(jī)分配適量的內(nèi)存山宾、CPU、網(wǎng)絡(luò)和磁盤鳍徽,并加載所有虛擬機(jī)的客戶操作系統(tǒng)资锰。 宿主 機(jī)

Hypervisor 是所有虛擬化技術(shù)的核心,軟硬件架構(gòu)和管理更高效阶祭、更靈活绷杜,硬件的效能 能夠更好地發(fā)揮出來。常見的產(chǎn)品有:VMware濒募、KVM鞭盟、Xen 等等。

2. 什么是Docker

容器技術(shù)

在計算機(jī)的世界中瑰剃,容器擁有一段漫長且傳奇的歷史懊缺。容器與管理程序虛擬化 (hypervisor virtualization,HV)有所不同培他,管理程序虛擬化通過中間層將一臺或者多臺獨立 的機(jī)器虛擬運行與物理硬件之上,而容器則是直接運行在操作系統(tǒng)內(nèi)核之上的用戶空間遗座。因 此舀凛,容器虛擬化也被稱為“操作系統(tǒng)級虛擬化”,容器技術(shù)可以讓多個獨立的用戶空間運行 在同一臺宿主機(jī)上途蒋。

由于“客居”于操作系統(tǒng)猛遍,容器只能運行與底層宿主機(jī)相同或者相似的操作系統(tǒng),這看 起來并不是非常靈活号坡。例如:可以在 Ubuntu 服務(wù)中運行 Redhat Enterprise Linux懊烤,但無法再 Ubuntu 服務(wù)器上運行 Microsoft Windows。

相對于徹底隔離的管理程序虛擬化宽堆,容器被認(rèn)為是不安全的腌紧。而反對這一觀點的人則認(rèn) 為,由于虛擬容器所虛擬的是一個完整的操作系統(tǒng)畜隶,這無疑增大了攻擊范圍壁肋,而且還要考慮 管理程序?qū)訚撛诘谋┞讹L(fēng)險号胚。

盡管有諸多局限性,容器還是被廣泛部署于各種各樣的應(yīng)用場合浸遗。在超大規(guī)模的多租戶 服務(wù)部署猫胁、輕量級沙盒以及對安全要求不太高的隔離環(huán)境中,容器技術(shù)非常流行跛锌。最常見的 一個例子就是“權(quán)限隔離監(jiān)牢”(chroot jail)弃秆,它創(chuàng)建一個隔離的目錄環(huán)境來運行進(jìn)程。 如果權(quán)限隔離監(jiān)牢正在運行的進(jìn)程被入侵者攻破髓帽,入侵者便會發(fā)現(xiàn)自己“身陷囹圄”菠赚,因為 權(quán)限不足被困在容器所創(chuàng)建的目錄中,無法對宿主機(jī)進(jìn)一步破壞氢卡。

最新的容器技術(shù)引入了 OpenVZ锈至、Solaris Zones 以及 Linux 容器(LXC)。使用這些新技 術(shù)译秦,容器不在僅僅是一個單純的運行環(huán)境峡捡。在自己的權(quán)限類內(nèi),容器更像是一個完整的宿主 機(jī)筑悴。對 Docker 來說们拙,它得益于現(xiàn)代 Linux 特性,如控件組(control group)阁吝、命名空間 (namespace)技術(shù)砚婆,容器和宿主機(jī)之間的隔離更加徹底,容器有獨立的網(wǎng)絡(luò)和存儲棧突勇,還 擁有自己的資源管理能力装盯,使得同一臺宿主機(jī)中的多個容器可以友好的共存。

容器被認(rèn)為是精益技術(shù)甲馋,因為容器需要的開銷有限埂奈。和傳統(tǒng)虛擬化以及半虛擬化相比, 容器不需要模擬層(emulation layer)和管理層(hypervisor layer)定躏,而是使用操作系統(tǒng)的系 統(tǒng)調(diào)用接口账磺。這降低了運行單個容器所需的開銷,也使得宿主機(jī)中可以運行更多的容器痊远。

盡管有著光輝的歷史垮抗,容器仍未得到廣泛的認(rèn)可。一個很重要的原因就是容器技術(shù)的復(fù) 雜性:容器本身就比較復(fù)雜碧聪,不易安裝冒版,管理和自動化也很困難。而 Docker 就是為了改變 這一切而生的逞姿。

容器與虛擬機(jī)的比較

  1. 本質(zhì)上的區(qū)別

    虛擬機(jī)在搭建的時候必須構(gòu)建一個完整的操作系統(tǒng)壤玫,比較沉重

    容器雖然也需要構(gòu)建一個操作系統(tǒng)豁护,但是在一個操作系統(tǒng)上可以構(gòu)建很多的容器

    ![Docker客戶端與服務(wù)器.png](https://upload-images.jianshu.io/upload_images/8572700-90142d6b14d292e2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  1. 使用上的區(qū)別

    虛擬機(jī)在對比容器時在使用時過于龐大,運行速度慢欲间,用戶體驗極差

docker使用上的區(qū)別.png
#### Docker特點

1)**上手快**

用戶只需要幾分鐘楚里,就可以把自己的程序“Docker 化”。Docker 依賴于“寫時復(fù)制” (copy-on-write)模型猎贴,使修改應(yīng)用程序也非常迅速班缎,可以說達(dá)到“隨心所致,代碼即改” 的境界她渴。

隨后达址,就可以創(chuàng)建容器來運行應(yīng)用程序了。大多數(shù) Docker 容器只需要不到 1 秒中即可 啟動趁耗。由于去除了管理程序的開銷沉唠,Docker 容器擁有很高的性能,同時同一臺宿主機(jī)中也 可以運行更多的容器苛败,使用戶盡可能的充分利用系統(tǒng)資源满葛。

2)**職責(zé)的邏輯分類**

使用 Docker,開發(fā)人員只需要關(guān)心容器中運行的應(yīng)用程序罢屈,而運維人員只需要關(guān)心如 何管理容器嘀韧。Docker 設(shè)計的目的就是要加強(qiáng)開發(fā)人員寫代碼的開發(fā)環(huán)境與應(yīng)用程序要部署 的生產(chǎn)環(huán)境一致性。從而降低那種“開發(fā)時一切正常缠捌,肯定是運維的問題(測試環(huán)境都是正 常的锄贷,上線后出了問題就歸結(jié)為肯定是運維的問題)”

3)**快速高效的開發(fā)生命周期**

Docker 的目標(biāo)之一就是縮短代碼從開發(fā)、測試到部署曼月、上線運行的周期谊却,讓你的應(yīng)用 程序具備可移植性,易于構(gòu)建哑芹,并易于協(xié)作因惭。(通俗一點說,Docker 就像一個盒子绩衷,里面 可以裝很多物件,如果需要這些物件的可以直接將該大盒子拿走激率,而不需要從該盒子中一件 件的取咳燕。)

4)**鼓勵使用面向服務(wù)的架構(gòu)**

Docker 還鼓勵面向服務(wù)的體系結(jié)構(gòu)和微服務(wù)架構(gòu)。Docker 推薦單個容器只運行一個應(yīng) 用程序或進(jìn)程乒躺,這樣就形成了一個分布式的應(yīng)用程序模型招盲,在這種模型下,應(yīng)用程序或者服 務(wù)都可以表示為一系列內(nèi)部互聯(lián)的容器嘉冒,從而使分布式部署應(yīng)用程序曹货,擴(kuò)展或調(diào)試應(yīng)用程序 都變得非常簡單咆繁,同時也提高了程序的內(nèi)省性。(當(dāng)然顶籽,可以在一個容器中運行多個應(yīng)用程 序)

3. Docker組件

1)Docker 客戶端和服務(wù)器

Docker 是一個客戶端-服務(wù)器(C/S)架構(gòu)程序玩般。Docker 客戶端只需要向 Docker 服務(wù)器 或者守護(hù)進(jìn)程發(fā)出請求,服務(wù)器或者守護(hù)進(jìn)程將完成所有工作并返回結(jié)果礼饱。Docker 提供了 一個命令行工具 Docker 以及一整套 RESTful API坏为。你可以在同一臺宿主機(jī)上運行 Docker 守護(hù) 進(jìn)程和客戶端,也可以從本地的 Docker 客戶端連接到在另一臺宿主機(jī)上的遠(yuǎn)程 Docker 守護(hù)進(jìn)程镊绪。


Docker客戶端與服務(wù)器.png

2)Docker鏡像

鏡像是構(gòu)建 Docker 的基石匀伏。用戶基于鏡像來運行自己的容器。鏡像也是 Docker 生命周 期中的“構(gòu)建”部分蝴韭。鏡像是基于聯(lián)合文件系統(tǒng)的一種層式結(jié)構(gòu)够颠,由一系列指令一步一步構(gòu) 建出來。例如:

添加一個文件;

執(zhí)行一個命令;

打開一個窗口榄鉴。

也可以將鏡像當(dāng)作容器的“源代碼”履磨。鏡像體積很小,非忱喂瑁“便攜”蹬耘,易于分享、存儲和更 新减余。

3)Registry(注冊中心)

Docker 用 Registry 來保存用戶構(gòu)建的鏡像综苔。Registry 分為公共和私有兩種。Docker 公司 運營公共的 Registry 叫做 Docker Hub位岔。用戶可以在 Docker Hub 注冊賬號如筛,分享并保存自己的 鏡像(說明:在 Docker Hub 下載鏡像巨慢,可以自己構(gòu)建私有的 Registry)抒抬。

4)Docker容器

Docker 可以幫助你構(gòu)建和部署容器杨刨,你只需要把自己的應(yīng)用程序或者服務(wù)打包放進(jìn)容 器即可。容器是基于鏡像啟動起來的擦剑,容器中可以運行一個或多個進(jìn)程妖胀。我們可以認(rèn)為,鏡 像是Docker生命周期中的構(gòu)建或者打包階段惠勒,而容器則是啟動或者執(zhí)行階段赚抡。 容器基于 鏡像啟動,一旦容器啟動完成后纠屋,我們就可以登錄到容器中安裝自己需要的軟件或者服務(wù)涂臣。
Docker容器.png

所以 Docker 容器就是: 一個鏡像格式; 一些列標(biāo)準(zhǔn)操作; 一個執(zhí)行環(huán)境。

Docker 借鑒了標(biāo)準(zhǔn)集裝箱的概念售担。標(biāo)準(zhǔn)集裝箱將貨物運往世界各地赁遗,Docker 將這個模 型運用到自己的設(shè)計中署辉,唯一不同的是:集裝箱運輸貨物,而 Docker 運輸軟件岩四。

和集裝箱一樣哭尝,Docker 在執(zhí)行上述操作時,并不關(guān)心容器中到底裝了什么炫乓,它不管是 web 服務(wù)器刚夺,還是數(shù)據(jù)庫,或者是應(yīng)用程序服務(wù)器什么的末捣。所有的容器都按照相同的方式將 內(nèi)容“裝載”進(jìn)去侠姑。

Docker 也不關(guān)心你要把容器運到何方:我們可以在自己的筆記本中構(gòu)建容器,上傳到 Registry箩做,然后下載到一個物理的或者虛擬的服務(wù)器來測試莽红,在把容器部署到具體的主機(jī)中。 像標(biāo)準(zhǔn)集裝箱一樣邦邦,Docker 容器方便替換安吁,可以疊加,易于分發(fā)燃辖,并且盡量通用鬼店。

使用 Docker,我們可以快速的構(gòu)建一個應(yīng)用程序服務(wù)器黔龟、一個消息總線妇智、一套實用工 具、一個持續(xù)集成(CI)測試環(huán)境或者任意一種應(yīng)用程序氏身、服務(wù)或工具巍棱。我們可以在本地構(gòu) 建一個完整的測試環(huán)境,也可以為生產(chǎn)或開發(fā)快速復(fù)制一套復(fù)雜的應(yīng)用程序棧蛋欣。

4 使用Docker做什么

容器提供了隔離性航徙,結(jié)論是,容器可以為各種測試提供很好的沙盒環(huán)境陷虎。并且到踏,容器本

身就具有“標(biāo)準(zhǔn)性”的特征,非常適合為服務(wù)創(chuàng)建構(gòu)建塊尚猿。Docker 的一些應(yīng)用場景如下:

  • 加速本地開發(fā)和構(gòu)建流程窝稿,使其更加高效、更加輕量化谊路。本地開發(fā)人員可以構(gòu)建、 運行并分享 Docker 容器菩彬。容器可以在開發(fā)環(huán)境中構(gòu)建缠劝,然后輕松的提交到測試環(huán)境中潮梯,并 最終進(jìn)入生產(chǎn)環(huán)境。

  • 能夠讓獨立的服務(wù)或應(yīng)用程序在不同的環(huán)境中惨恭,得到相同的運行結(jié)果秉馏。這一點在 面向服務(wù)的架構(gòu)和重度依賴微型服務(wù)的部署由其實用。

  • 用 Docker 創(chuàng)建隔離的環(huán)境來進(jìn)行測試脱羡。例如萝究,用 Jenkins CI 這樣的持續(xù)集成工具 啟動一個用于測試的容器。

  • Docker 可以讓開發(fā)者先在本機(jī)上構(gòu)建一個復(fù)雜的程序或架構(gòu)來進(jìn)行測試锉罐,而不是 一開始就在生產(chǎn)環(huán)境部署帆竹、測試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脓规,一起剝皮案震驚了整個濱河市栽连,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侨舆,老刑警劉巖秒紧,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挨下,居然都是意外死亡熔恢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門臭笆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叙淌,“玉大人,你說我怎么就攤上這事耗啦≡淦校” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵帜讲,是天一觀的道長衅谷。 經(jīng)常有香客問我,道長似将,這世上最難降的妖魔是什么获黔? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮在验,結(jié)果婚禮上玷氏,老公的妹妹穿的比我還像新娘。我一直安慰自己腋舌,他們只是感情好盏触,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般赞辩。 火紅的嫁衣襯著肌膚如雪雌芽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天辨嗽,我揣著相機(jī)與錄音世落,去河邊找鬼。 笑死糟需,一個胖子當(dāng)著我的面吹牛屉佳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洲押,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼武花,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诅诱?” 一聲冷哼從身側(cè)響起髓堪,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娘荡,沒想到半個月后干旁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡炮沐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年争群,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片大年。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡换薄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翔试,到底是詐尸還是另有隱情轻要,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布垦缅,位于F島的核電站冲泥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏壁涎。R本人自食惡果不足惜凡恍,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怔球。 院中可真熱鬧嚼酝,春花似錦、人聲如沸竟坛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涎跨,卻和暖如春延刘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背六敬。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留驾荣,地道東北人外构。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像播掷,于是被迫代替她去往敵國和親审编。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容