容器與管理程序虛擬化
- 管理程序虛擬化通過(guò)中間層將獨(dú)立的機(jī)器虛擬運(yùn)行于物理硬件上。
- 容器則直接運(yùn)行在操作系統(tǒng)內(nèi)核之上的用戶空間够话。
容器也被稱為“操作系統(tǒng)級(jí)虛擬化”,容器技術(shù)讓多個(gè)獨(dú)立的用戶空間運(yùn)行在同一臺(tái)宿主機(jī)上蒿褂。
Docker
Docker是一個(gè)能把應(yīng)用程序自動(dòng)部署到容器的開源引擎潘拨。它在虛擬化的容器執(zhí)行的環(huán)境中增加了一個(gè)應(yīng)用程序部署引擎。
Docker極其簡(jiǎn)潔蹦魔,所需環(huán)境僅為一臺(tái)安裝了兼容版本Linux內(nèi)核和二進(jìn)制文件最小限的宿主機(jī)激率。
Docker為我們提供了
簡(jiǎn)單輕量的建模方式
上手快,啟動(dòng)快勿决,高性能乒躺,低開銷。職責(zé)邏輯分離
開發(fā)只需關(guān)心容器中的應(yīng)用程序低缩;運(yùn)維只需關(guān)心管理容器嘉冒;同時(shí)還方便統(tǒng)一運(yùn)行環(huán)境,避免“在我機(jī)器上沒問(wèn)題”的情況。高效的開發(fā)生命周期
從開發(fā)健爬、測(cè)試到部署控乾,讓你的程序具備可移植性,易于構(gòu)建娜遵,易于協(xié)作蜕衡。SOA友好
Docker推薦單個(gè)容器只運(yùn)行一個(gè)應(yīng)用程序或進(jìn)程,構(gòu)建分布式應(yīng)用程序模型设拟。
Docker核心組件
-
Docker客戶端與服務(wù)端慨仿,即Docker引擎
- Docker是CS架構(gòu)的程序
- Docker向服務(wù)器或守護(hù)進(jìn)程發(fā)請(qǐng)求,由服務(wù)器或守護(hù)進(jìn)程處理完成后響應(yīng)
- Docker守護(hù)進(jìn)程也叫Docker引擎
- Docker提供了一套docker命令行工具以及一套R(shí)ESTful API與Docker引擎交互
-
Docker鏡像
- 鏡像是構(gòu)建Docker世界的基石
- 基于鏡像創(chuàng)建容器
- 可以把鏡像當(dāng)作容器的“源代碼”
- 鏡像體積小纳胧,易于分享
-
Registry
- 用來(lái)保存用戶構(gòu)建的鏡像
- 官方公共Registry是Docker Hub
- 國(guó)內(nèi)的加速鏡像是https://registry.docker-cn.com
- 用戶還可以架設(shè)自己的私有Registry
-
Docker容器
- 一個(gè)鏡像格式
- 一系列標(biāo)準(zhǔn)的操作
- 一個(gè)執(zhí)行環(huán)境
Docker能用來(lái)做什么
容器天生自帶了“標(biāo)準(zhǔn)性”的特征镰吆,很適合為服務(wù)創(chuàng)建構(gòu)建塊。Docker的一些使用場(chǎng)景:
- 加速本地開發(fā)和構(gòu)建流程跑慕。開發(fā)人員可構(gòu)建万皿、運(yùn)行并分享Docker容器。容器可以在開發(fā)環(huán)境中構(gòu)建核行,然后提交到測(cè)試環(huán)境牢硅,最終進(jìn)入生產(chǎn)環(huán)境
- 可以讓獨(dú)立服務(wù)或應(yīng)用程序在不同環(huán)境中,得到相同結(jié)果
- 用Docker創(chuàng)建隔離的環(huán)境來(lái)進(jìn)行測(cè)試芝雪。如Jenkins CI持續(xù)集成工具啟動(dòng)一個(gè)用于測(cè)試的容器
- 構(gòu)建一個(gè)多用戶的平臺(tái)即服務(wù)(PaaS)基礎(chǔ)設(shè)施
- 提供軟件即服務(wù)(SaaS)應(yīng)用程序
- 高性能减余、超大規(guī)模的宿主主機(jī)部署
- 等等
Docker的技術(shù)組件
Docker可運(yùn)行在任何安裝了現(xiàn)代Linux內(nèi)核的x64主機(jī)上。推薦內(nèi)核版本3.8以上惩系。Docker開銷低位岔,可用于服務(wù)器、臺(tái)式機(jī)或筆記本電腦堡牡。它包括以下幾個(gè)部分:
- 一個(gè)原生Linux容器格式抒抬,Docker中稱為libcontainer
- Linux內(nèi)核的命名空間,用于隔離文件系統(tǒng)悴侵、進(jìn)程和網(wǎng)絡(luò)
- 文件系統(tǒng)隔離:每個(gè)容器都有自己的root文件系統(tǒng)
- 進(jìn)程隔離:每個(gè)容器都運(yùn)行在自己的進(jìn)程環(huán)境中
- 網(wǎng)絡(luò)隔離:容器間的虛擬網(wǎng)絡(luò)接口和IP地址都是分開的
- 資源隔離和分組:使用cgroups(即control group瞧剖,Linux的內(nèi)核特性之一)將CPU和內(nèi)存之類的資源獨(dú)立分配給每個(gè)Docker容器
- 寫時(shí)復(fù)制:文件系統(tǒng)都是通過(guò)寫時(shí)復(fù)制創(chuàng)建的,這意味著文件系統(tǒng)時(shí)分層的可免、快速的抓于,而且占用磁盤空間更小
- 日志:容器產(chǎn)生的STDOUT、STDERR和STDIN這些IO流都會(huì)被收集并記入日志浇借,用于日志分析或排錯(cuò)
- 交互式shell:用戶可創(chuàng)建一個(gè)偽tty終端捉撮,將其連接到STDIN,為容器提供一個(gè)交互式shell
寫了這么多干巴巴的文字妇垢,下一篇就開始進(jìn)入實(shí)用環(huán)節(jié)巾遭。