**二、**Docker介紹
2.1 什么是虛擬化
在計(jì)算機(jī)中,虛擬化是一種資源管理技術(shù),是將計(jì)算機(jī)的各種實(shí)體資源,如:服務(wù)器、網(wǎng)絡(luò)、內(nèi)存、存儲(chǔ)等等,予以抽象、轉(zhuǎn)換后呈現(xiàn)出來(lái),打破實(shí)體結(jié)構(gòu)間的不可切割的障礙,使用戶可以比原來(lái)的組態(tài)更好的方式來(lái)應(yīng)用這些資源,這些資源的核心虛擬部分是不受現(xiàn)有資源的架設(shè)方式,低于或者物理組態(tài)所限制,一般所指的虛擬化資源包括計(jì)算能力和資料存儲(chǔ)。
在實(shí)際的生產(chǎn)過(guò)程中,虛擬化技術(shù)主要是用來(lái)解決高性能的物理硬件產(chǎn)能過(guò)剩和老的硬件產(chǎn)能過(guò)低的重用重組,透明化底層物理硬件,從而最大化的利用物理硬件,對(duì)資源充分利用。
虛擬化技術(shù)種類(lèi)很多,例如:軟件虛擬化、硬件虛擬化、內(nèi)存虛擬化、網(wǎng)絡(luò)虛擬化(vip),桌面虛擬化、服務(wù)虛擬化、虛擬機(jī)等等。
虛擬化簡(jiǎn)單講,就是把一臺(tái)物理計(jì)算機(jī)虛擬成多臺(tái)邏輯計(jì)算機(jī),每個(gè)邏輯計(jì)算機(jī)里面可以運(yùn)行不同的操作系統(tǒng),相互不受影響,這樣就可以充分利用硬件資源。
2.2 認(rèn)識(shí)Docker
- Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎
- 誕生于2013年初,基于Go語(yǔ)言實(shí)現(xiàn),dotCloud公司出品(后改名為Docker Inc)Docker可以讓開(kāi)發(fā)者打包他們的應(yīng)用以及依賴包到一個(gè)輕量級(jí),可移植的容器中,然后發(fā)布到任何流行的linux服務(wù)器上
- 容器是完全使用沙箱機(jī)制,相互隔離
- 容器性能開(kāi)銷(xiāo)極低
- Docker從17.3版本之后分為CE(Community Edition社區(qū)版)和EE(Enterprise Edition企業(yè)版)
小結(jié):Docker是一種容器技術(shù),解決軟件跨環(huán)境遷移的問(wèn)題
2.3 容器與虛擬機(jī)比較
2.3.1 什么是虛擬機(jī)
虛擬機(jī)是一個(gè)計(jì)算機(jī)系統(tǒng)的仿真,簡(jiǎn)單來(lái)說(shuō),虛擬機(jī)可以實(shí)現(xiàn)在一臺(tái)物理計(jì)算機(jī)上模擬多臺(tái)計(jì)算機(jī)運(yùn)行任務(wù)。
-
操作系統(tǒng)和應(yīng)用共享一臺(tái)或多臺(tái)主機(jī)(集群)的硬件資源,每臺(tái)VM有自己的OS,硬件資源是虛擬化的。
-
管理程序(hypervisor)負(fù)責(zé)創(chuàng)建和運(yùn)行VM,它連接了硬件資源和虛擬機(jī),完成server的虛擬化。
由于虛擬化技術(shù)和云服務(wù)的出現(xiàn),IT部門(mén)通過(guò)部署VM可以可減少cost提高效率
VMs也消耗大量系統(tǒng)資源,每個(gè)VM不僅運(yùn)行一個(gè)OS的完整copy并且需要所有硬件的虛擬化copy,這消耗大量RAM和CPU。
相比單獨(dú)計(jì)算機(jī),VM是比較經(jīng)濟(jì)的,但對(duì)于一些應(yīng)用VM是過(guò)度浪費(fèi)的,需要容器。
2.3.2 什么是容器
- 容器是將操作系統(tǒng)虛擬化,這與VM虛擬化一個(gè)完整的計(jì)算機(jī)有所不同。
- 容器是在操作系統(tǒng)之上,每個(gè)容器共享OS內(nèi)核,執(zhí)行文件和庫(kù)等。共享的組件是只讀的,通過(guò)共享OS資源能夠減少?gòu)?fù)現(xiàn)OS的代碼,意味著一臺(tái)server僅安裝一個(gè)OS可以運(yùn)行多個(gè)任務(wù)。
- 容器是非常輕量的,僅僅MB水平并且?guī)酌爰纯蓡?dòng)。相比容器,VM需要幾分鐘啟動(dòng),并且大小也大很多。
2.4、 Docker與虛擬機(jī)形象比喻
2.4.1 什么是物理機(jī)
2.4.2 什么是虛擬機(jī)
2.4.3 什么是docker
三、Docker 組件
3.1 Docker 服務(wù)端和客戶端
Docker是一個(gè)客戶端-服務(wù)端(C/S)架構(gòu)程序 ,Docker客戶端只需要向Docker服務(wù)端或者守護(hù)進(jìn)程發(fā)出請(qǐng)求,服務(wù)端或者守護(hù)進(jìn)程完成所有工作返回結(jié)果。
Docker提供了一個(gè)命令行工具Docker以及一整套的Restful API,可以在同一臺(tái)宿主機(jī)器上運(yùn)行Docker守護(hù)進(jìn)程或者客戶端,也可以從本地的Docker客戶端連接到運(yùn)行在另一臺(tái)宿主機(jī)上的遠(yuǎn)程Docker守護(hù)進(jìn)程。
docker引擎是一個(gè)c/s結(jié)構(gòu)的應(yīng)用,主要組件見(jiàn)下圖:
- Server是一個(gè)常駐進(jìn)程
- REST API 實(shí)現(xiàn)了client和server間的交互協(xié)議
- CLI 實(shí)現(xiàn)容器和鏡像的管理,為用戶提供統(tǒng)一的操作界面
3.2 Docker 構(gòu)架
Docker使用C/S架構(gòu), Client 通過(guò)接口與Server進(jìn)程通信實(shí)現(xiàn)容器的構(gòu)建,運(yùn)行和發(fā)布 .client和server可以運(yùn)行在同一臺(tái)集群,也可以通過(guò)跨主機(jī)實(shí)現(xiàn)遠(yuǎn)程通信。
3.2.1 Docker 鏡像
Docker 鏡像(Image)就是一個(gè)只讀的模板。例如:一個(gè)鏡像可以包含一個(gè)完整的操作系統(tǒng)
環(huán)境,里面僅安裝了 Apache 或用戶需要的其它應(yīng)用程序
- 鏡像可以用來(lái)創(chuàng)建 Docker 容器,一個(gè)鏡像可以創(chuàng)建很多容器。Docker 提供了一個(gè)很簡(jiǎn)單的機(jī)制來(lái)創(chuàng)建鏡像或者更新現(xiàn)有的鏡像,用戶甚至可以直接從其他人那里下載一個(gè)已經(jīng)做好的鏡像來(lái)直接使用。
- 鏡像(Image)就是一堆只讀層(read-only layer)的統(tǒng)一視角,也許這個(gè)定義有些難以理解。
看看下面這張圖:
右邊可以看到多個(gè)只讀層,它們重疊在一起,除了最下面一層,其它層都會(huì)有一個(gè)指針指向下一層。這些層是Docker內(nèi)部的實(shí)現(xiàn)細(xì)節(jié),并且能夠在docker宿主機(jī)的文件系統(tǒng)上訪問(wèn)到。
統(tǒng)一文件系統(tǒng)(Union File System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了一個(gè)統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來(lái),只存在一個(gè)文件系統(tǒng)。
3.2.2 Docker 容器
Docker 利用容器(Container)來(lái)運(yùn)行應(yīng)用。容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例。它可以被啟動(dòng)、開(kāi)始、停止、刪除。每個(gè)容器都是相互隔離的、保證安全的平臺(tái)。
-
可以把容器看做是一個(gè)簡(jiǎn)易版的 Linux 環(huán)境(包括root用戶權(quán)限、進(jìn)程空間、用戶空間和網(wǎng) 絡(luò)空間等)和運(yùn)行在其中的應(yīng)用程序。
-
創(chuàng)建Container首先要有Image,也就是說(shuō)Container是通過(guò)image創(chuàng)建的。
-
Container是在原先的Image之上新加的一層,稱作Container layer,這一層是可讀可寫(xiě)的(Image是只讀的)。
在面向?qū)ο蟮?a href="http://m.xsypw.cn/v/tag/1315/" target="_blank">編程語(yǔ)言中,有類(lèi)跟對(duì)象的概念。類(lèi)是抽象的,對(duì)象是類(lèi)的具體實(shí)現(xiàn)。Image跟
Container可以類(lèi)比面向?qū)ο笾械念?lèi)跟對(duì)象,Image就相當(dāng)于抽象的類(lèi),Container就相當(dāng)于具體實(shí)例化的對(duì)象。
Image跟Container的職責(zé)區(qū)別:Image負(fù)責(zé)APP的存儲(chǔ)和分發(fā),Container負(fù)責(zé)運(yùn)行APP
3.2.3 Registy(注冊(cè)中心)
倉(cāng)庫(kù)(Repository)是集中存放鏡像文件的場(chǎng)所。 有時(shí)候會(huì)把倉(cāng)庫(kù)和倉(cāng)庫(kù)注冊(cè)服務(wù)(Registry)混為一談,并不嚴(yán)格區(qū)分。
實(shí)際上,倉(cāng)庫(kù)注冊(cè)服務(wù)器上往往存放多個(gè)倉(cāng)庫(kù),每個(gè)倉(cāng)庫(kù)中又包含了多個(gè)鏡像,每個(gè)鏡像有不同的標(biāo)簽(tag)。
倉(cāng)庫(kù)分為公開(kāi)倉(cāng)庫(kù)(Public)和私有倉(cāng)庫(kù)(Private)兩種形式。
- 最大的公開(kāi)倉(cāng)庫(kù)是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載。
- 國(guó)內(nèi)的公開(kāi)倉(cāng)庫(kù)包括時(shí)速云 、網(wǎng)易云等,可以提供大陸用戶更穩(wěn)定快速的訪問(wèn)。
- 當(dāng)然,用戶也可以在本地網(wǎng)絡(luò)內(nèi)創(chuàng)建一個(gè)私有倉(cāng)庫(kù),當(dāng)用戶創(chuàng)建了自己的鏡像之后就可以使用 push 命令將它上傳到公有或者私有倉(cāng)庫(kù),這樣下次在另外一臺(tái)機(jī)器上使用這個(gè)鏡像時(shí)候,只需要從倉(cāng)庫(kù)上 pull 下來(lái)就可以了。
Docker 倉(cāng)庫(kù)的概念跟 Git 類(lèi)似,注冊(cè)服務(wù)器可以理解為 GitHub 這樣的托管服務(wù)。
**
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9702瀏覽量
87318 -
Docker
+關(guān)注
關(guān)注
0文章
512瀏覽量
12722
發(fā)布評(píng)論請(qǐng)先 登錄
Docker是什么?
Docker入門(mén)指南
docker基礎(chǔ)知識(shí)和使用bmnnsdk時(shí)的docker常用命令
學(xué)習(xí) Docker 容器的 8 個(gè)命令分享

docker存儲(chǔ)驅(qū)動(dòng)的工作原理
應(yīng)用于Docker的安全工具介紹
docker技術(shù)入門(mén)與實(shí)戰(zhàn)
docker 搜索鏡像,docker查看鏡像詳細(xì)信息(docker下載鏡像命令)
如何啟動(dòng)本機(jī)docker服務(wù)
docker進(jìn)入容器的方法有哪些
docker核心組件有哪些
【技術(shù)案例】Android in Docker

評(píng)論