Docker直譯過來是碼頭工人,然而Docker給人的第一感覺是容器,容器技術(shù)英譯為Linux Container, Container的直譯有集裝箱,容器兩個意思,如果要形象的理解Linux Container的話還是叫集裝箱技術(shù)比較好(可以結(jié)合著上圖及LOGO理解這句話),由于這涉及到學(xué)術(shù)交流,及中國本土文化,念集裝箱技術(shù)會比較奇怪,所以我們都稱之為容器技術(shù)
為什么是“集裝箱技術(shù)”
我們都知道碼頭里的集裝箱是運載貨物用的,它是一種按規(guī)格標(biāo)準(zhǔn)化的鋼制箱子。集裝箱的特色,「在于其格式劃一,并可以層層重疊, 集裝箱與集裝箱之間互不影響」
于是乎,IT領(lǐng)域借鑒了這一理念,大家就在想,有沒有可能大家「只需要關(guān)注程序本身?」
換句話來說,就是我部署一個服務(wù)運行好后,我再想移植到另外一個地方,
「不用再安裝一套操作系統(tǒng)和依賴環(huán)境。」
這就像集裝箱運載一樣,我把一輛蘭博基尼跑車(好比開發(fā)好的應(yīng)用APP),打包放到一容器集裝箱里,它通過貨輪可以輕而易舉的從上海碼頭(CentOS7.2環(huán)境)運送到紐約碼頭(Ubuntu14.04環(huán)境)。而且運輸期間,我的蘭博基尼(APP)沒有受到任何的損壞(文件沒有丟失),在另外一個碼頭卸貨后,依然可以完美風(fēng)騷的賽跑(啟動正常)。
進(jìn)入正題
定義: Docker是一個開源的應(yīng)用容器引擎,開發(fā)者可以打包他們的應(yīng)用及依賴到一個可移植的容器中,發(fā)布到流行的Linux機(jī)器上,也可實現(xiàn)虛擬化
進(jìn)一步認(rèn)識Docker之前,我準(zhǔn)備了兩個關(guān)鍵詞
虛擬化技術(shù)
容器技術(shù)
虛擬化技術(shù)
定義: Virtual Machine(又名VM) 虛擬化,是指通過虛擬化技術(shù)將一臺計算機(jī)虛擬為多臺邏輯計算機(jī)。在一臺計算機(jī)上同時運行多個邏輯計算機(jī),每個邏輯計算機(jī)可運行不同的操作系統(tǒng),并且應(yīng)用程序[1]都可以在相互獨立的空間內(nèi)運行而互不影響,從而顯著提高計算機(jī)的工作效率
通俗點來講就是虛擬化是為一些組件(例如虛擬應(yīng)用、服務(wù)器、存儲和網(wǎng)絡(luò))創(chuàng)建基于軟件的(或虛擬)表現(xiàn)形式的過程。
基于hypervisor(虛擬機(jī)管理系統(tǒng))的虛擬化方式可以最大程度上提供虛擬化管理的靈活性。各種不同操作系統(tǒng)的虛擬機(jī)都能通過 hypervisor 來衍生、運行、銷毀。
然而,隨著時間推移,人們發(fā)現(xiàn)hypervisor這種方式麻煩越來越多。為什么?因為對于hypervisor環(huán)境來說,每個虛擬機(jī)都需要運行一個完整的操作系統(tǒng)以及其中安裝好的大量應(yīng)用程序, 如下圖
但實際生產(chǎn)應(yīng)用時,「我們更關(guān)注的是自己部署的應(yīng)用程序本身」
容器技術(shù)
定義: 英文為Container 有效的將單個操作系統(tǒng)的資源劃分到孤立的組中,以便更好的在孤立的組之間平衡有沖突的資源使用需求
容器技術(shù)嚴(yán)格來說并不是虛擬化,沒有客戶機(jī)操作系統(tǒng),是共享內(nèi)核的。容器可以視為軟件供應(yīng)鏈的集裝箱,能夠把應(yīng)用需要的運行環(huán)境、緩存環(huán)境、數(shù)據(jù)庫環(huán)境等等封裝起來,以最簡潔的方式支持應(yīng)用運行
Docker三大核心概念
鏡像
容器
倉庫
為了更好的理解,先講大家講個小故事
小A同學(xué)想要造一棟別墅,他重金請來了高級設(shè)計師,高級建造師,等各種高級工人,熱火朝天歷時二個月房子建成了,半年后,小A同學(xué)由于工作調(diào)動需要換到另一個城市,他只好在另一個城市花了重金又打造了一棟別墅
小A有一個朋友小B,跟小A是同樣的場景,唯一不同的是,小B認(rèn)識一個魔法師,這個魔法師施展了法術(shù)(構(gòu)建鏡像),將小B的別墅直接復(fù)制了一份(鏡像),裝到了小B的雙肩包(倉庫)里,小B去到另一個城市找了一片空地(容器)直接將裝在書包里的房子拿了出來,拿出來的房子就能變成跟小B在原城市一模一樣的房子
聽完了故事,咱們再來理解docker的兩句口號就更好理解了
「Build, Ship and Run (搭建,發(fā)送,運行)」
「Build?once,Run?anywhere (搭建一次,運行到任何地方)」
鏡像如果進(jìn)行形象的表述,我們可以將 Docker 鏡像理解為包含應(yīng)用程序以及其相關(guān)依賴的一個基礎(chǔ)文件系統(tǒng)(存儲著我們的程序和數(shù)據(jù)文件等等信息,鏡像層可以理解為基本的鏡像,可以通過組合多個鏡像層生成一個新的鏡像;也可以將一個鏡像可以作為一個鏡像層,成為組合別的鏡像的一份子),在 Docker 容器啟動的過程中,它以只讀的方式被用于創(chuàng)建容器的運行環(huán)境,
容器容器和鏡像一樣,也是若干層的疊加,唯一區(qū)別是所有只讀層的最上面一層,是一層可讀可寫層,可以記住這個簡單的公式:容器 = 容器鏡像 + 可讀可寫層
前面說鏡像的時候我們有提到它是一個靜態(tài)文件系統(tǒng),那么既然容器跟它一樣,所以,鏡像跟容器都是一個靜態(tài)概念,但是,容器是可以run起來的,當(dāng)容器run起來時,就會成為一個被稱作運行態(tài)容器的東西,
運行態(tài)容器(run container)是由靜態(tài)容器(可讀寫的靜態(tài)文件系統(tǒng))、一個隔離的進(jìn)程空間、以及運行于其中的程序進(jìn)程所組成。我們通常用docker run運行起來的其實就是運行態(tài)容器,而使用docker stop停止后的容器,就是靜態(tài)容器
倉庫倉庫(Repository)是最易理解的部分,大家都用過Node的包管理Npm,這個概念是一致的,倉庫分為兩種,本地及遠(yuǎn)程,當(dāng)我們build好一個鏡像后,這個鏡像會先存放到本地倉庫,當(dāng)我們需要利用網(wǎng)絡(luò)進(jìn)行分發(fā)時,我們可以push到遠(yuǎn)程倉庫,后續(xù)通過網(wǎng)絡(luò)下載使用
官方的npm源下載有時候特別慢,這個是由于XX的原因,然后我們就需要使用國內(nèi)的鏡像源,那么docker 的操作也是一樣的
容器技術(shù)的特性
一種技術(shù)的采用,一定有它適合的場景和優(yōu)勢。容器技術(shù)的流行原因,總結(jié)下來可能主要歸功于以下的這些特性
輕量級(只打包必要的lib/bin)
秒布署(毫秒與秒之間)
易移植(「Build?once,Run?anywhere」)
彈性伸縮(高可用,節(jié)約成本)
總結(jié)
通過本文我們對Docker有了一個基本的認(rèn)識, 知道了Docker Logo并不是一條咸魚,容器技術(shù)與虛擬技術(shù)之間的差異,Docker的三大核心概念及其特性
但Docker中涉及的內(nèi)容遠(yuǎn)不止于此,帥編也會在下個章節(jié)為大家講解“實際工作場景中的Docker應(yīng)用”
責(zé)任編輯:pj
-
Linux
+關(guān)注
關(guān)注
87文章
11345瀏覽量
210402 -
服務(wù)器
+關(guān)注
關(guān)注
12文章
9307瀏覽量
86071 -
容器技術(shù)
+關(guān)注
關(guān)注
1文章
21瀏覽量
5622
發(fā)布評論請先 登錄
相關(guān)推薦
防止根文件系統(tǒng)破壞,OverlayRootfs 讓你的設(shè)備更安全
![防止根<b class='flag-5'>文件系統(tǒng)</b>破壞,OverlayRootfs 讓你的設(shè)備更安全](https://file.elecfans.com/web2/M00/10/E9/pYYBAGEfInyAb9dQAABH4pzjonI981.jpg)
Jtti:Linux中虛擬文件系統(tǒng)和容器化的關(guān)系
服務(wù)器數(shù)據(jù)恢復(fù)—raid5陣列+reiserfs文件系統(tǒng)數(shù)據(jù)恢復(fù)案例
TMS320硬件應(yīng)用程序(包含掃描的文本)
![TMS320硬件<b class='flag-5'>應(yīng)用程序</b>(<b class='flag-5'>包含</b>掃描的文本)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Linux根文件系統(tǒng)的掛載過程
如何構(gòu)建Linux根文件系統(tǒng)
想提高開發(fā)效率,不要忘記文件系統(tǒng)
![想提高開發(fā)效率,不要忘記<b class='flag-5'>文件系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/06/60/wKgZombkyvaAUaWlABZH07LDusM007.png)
[2K300適配OpenharmonyV4.1]根文件系統(tǒng)制作請教
如何修改buildroot和debian文件系統(tǒng)
![如何修改buildroot和debian<b class='flag-5'>文件系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/FD/B9/wKgZomaeKpCAeS1mAAJr5bnMFl8719.png)
linux--sysfs文件系統(tǒng)
![linux--sysfs<b class='flag-5'>文件系統(tǒng)</b>](https://file1.elecfans.com/web2/M00/F9/A4/wKgZomaLXwqAbGxzAAAQ6QVA7SI028.png)
鴻蒙開發(fā)文件管理:【@ohos.statfs (statfs)】
![鴻蒙開發(fā)<b class='flag-5'>文件</b>管理:【@ohos.statfs (statfs)】](https://file1.elecfans.com/web2/M00/ED/37/wKgZomZqT7SAMXLWAABBEh5nImc031.png)
評論