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