即學(xué)即用Docker(一):說說容器和Docker
2019-09-02閱讀 2454


提起Docker,我們不得不說說容器技術(shù)。容器技術(shù)這幾年一直是最熱門的話題,如果你還不知道說明你真的out了。為什么容器這么火呢,那是因?yàn)槿萜骷夹g(shù)給我們帶來了很多方便的地方,節(jié)約了不少成本,不管是在運(yùn)維還是開發(fā)上。而如今最熱門的開源容器工具就是docker了。

讓我們先聊聊歷史,在很久很久以前,想要在線上服務(wù)器部署一個(gè)應(yīng)用,首先需要購買一個(gè)物理服務(wù)器,在服務(wù)器安裝一個(gè)操作系統(tǒng),然后安裝好應(yīng)用所需要的各種依賴環(huán)境,最后才可以進(jìn)行應(yīng)用的部署,而且一臺(tái)服務(wù)器只能部署一個(gè)應(yīng)用。這就是我們所說的傳統(tǒng)IT。

如下圖

c1.png 

 

這就造成了以下幾個(gè)明顯問題:

  • 部署應(yīng)用非常慢

  • 需要花費(fèi)的成本非常高

  • 而且容易造成資源的浪費(fèi),因?yàn)橥粋€(gè)應(yīng)用使用不了一個(gè)服務(wù)器的資源

  • 難于遷移和擴(kuò)展

  • 可能會(huì)被限定硬件廠商,因?yàn)槟菚r(shí)候有不同硬件平臺(tái)

 

虛擬化技術(shù)出現(xiàn)以后,對(duì)于這種問題有所改變,虛擬化技術(shù)會(huì)在本地操作系統(tǒng)之上加多一層 Hypervisor層,Hypervisor是一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可以虛擬化硬件資源,例如cpu、硬盤、內(nèi)存資源等。然后我們可以基于通過虛擬化出來的資源之上安裝操作系統(tǒng),這也就是所謂的虛擬機(jī)。

 

通過Hypervisor層,我們可以創(chuàng)建不同的虛擬機(jī),并且可以限定每個(gè)虛擬機(jī)的物理資源,并且每個(gè)虛擬機(jī)都是分離、獨(dú)立的。例如A虛擬機(jī)給它使用2個(gè)CPU、8G內(nèi)存、100G磁盤,B虛擬機(jī)給它使用4個(gè)CPU、16G內(nèi)存、500g磁盤等等,這樣就可以實(shí)現(xiàn)物理資源利用率的最大化。

 

如此一來:

  • 一臺(tái)物理機(jī)就可以部署多個(gè)應(yīng)用

  • 每個(gè)應(yīng)用都可以獨(dú)立運(yùn)行在一個(gè)虛擬機(jī)里

 

如下圖

z1.png

 

虛擬化技術(shù)的優(yōu)點(diǎn):

  •  資源池——一個(gè)物理機(jī)的資源分配到了不同的虛擬機(jī)里

  • 很容易擴(kuò)展——增加物理機(jī)或者虛擬機(jī)即可,因?yàn)樘摂M機(jī)是可以復(fù)制的

  •  很容易云化——亞馬孫AWS,阿里云,谷歌云等

即然虛擬化技術(shù)已經(jīng)很強(qiáng)大了,為什么還需要容器技術(shù)呢?這就涉及到虛擬化技術(shù)所帶來的局限性了,每一個(gè)虛擬機(jī)都是一個(gè)完整的操作系統(tǒng),所以需要給其分配物理資源,當(dāng)虛擬機(jī)數(shù)量增多時(shí),操作系統(tǒng)本身消耗的資源勢(shì)必增多

以上所提到的這個(gè)問題還不是真正促使容器技術(shù)出現(xiàn)的根本原因,真正使容器技術(shù)出現(xiàn)的是開發(fā)和運(yùn)維所面臨的挑戰(zhàn):

001.png

 

上圖中可以看到開發(fā)與運(yùn)維的環(huán)境都比較復(fù)雜,一個(gè)應(yīng)用可能由多個(gè)服務(wù)組成,每個(gè)服務(wù)都有其獨(dú)特的依賴。同時(shí)應(yīng)用可能會(huì)需要部署到多種不同的環(huán)境中。這使得一個(gè)應(yīng)用在“開發(fā)-測試-部署-運(yùn)維”的過程中需要進(jìn)行大量的運(yùn)行環(huán)境適配工作。而容器技術(shù)正是解決了這種環(huán)境不一致的問題:

002.png

容器可以幫我們把開發(fā)環(huán)境及應(yīng)用整個(gè)打包帶走,打包好的容器可以在任何的環(huán)境下運(yùn)行,這樣就可以解決開發(fā)與運(yùn)維環(huán)境不一致的問題了,所以:

  • 容器解決了開發(fā)和運(yùn)維之間的矛盾

  • 在開發(fā)和運(yùn)維之間搭建了一個(gè)橋梁,是實(shí)現(xiàn)devops的最佳解決方案

 

了解了容器解決了什么問題,那讓我們用簡單的幾句話說明什么是容器

  • 對(duì)軟件和其依賴環(huán)境的標(biāo)準(zhǔn)化打包

  • 應(yīng)用之間相互隔離

  • 共享一個(gè)OS Kernel

  • 可以運(yùn)行在很多主流操作系統(tǒng)上

 

那么問題來了,容器和虛擬機(jī)的區(qū)別:

003.png

現(xiàn)在讓我們比較一下:


 004.png

當(dāng)然,我們還可容器可以和虛擬機(jī)結(jié)合在一起使用,而且這也是目前主流的做法。

 

說說Docker

 

Docker也是容器技術(shù)的一種實(shí)現(xiàn),也是目前比較主流的開源的容器實(shí)現(xiàn)工具,docker出現(xiàn)的時(shí)間軸:

005.png

 

 

Docker容器的思想:

Docker容器的思想來自于集裝箱,集裝箱解決了什么問題?在一艘大船上,可以把貨物規(guī)整的擺放起來。并且各種各樣的貨物被集裝箱標(biāo)準(zhǔn)化了,集裝箱和集裝箱之間不會(huì)互相影響。那么我就不需要專門運(yùn)送水果的船和專門運(yùn)送化學(xué)品的船了。只要這些貨物在集裝箱里封裝的好好的,那我就可以用一艘大船把他們都運(yùn)走。docker就是類似的理念?,F(xiàn)在都流行云計(jì)算了,云計(jì)算就好比大貨輪,docker就是集裝箱。

1.        不同的應(yīng)用程序可能會(huì)有不同的應(yīng)用環(huán)境,比如.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站依賴的軟件就不一樣,如果把他們依賴的軟件都安裝在一個(gè)服務(wù)器上就要調(diào)試很久,而且很麻煩,還會(huì)造成一些沖突。比如IIS和Apache訪問端口沖突。這個(gè)時(shí)候你就要隔離.net開發(fā)的網(wǎng)站和php開發(fā)的網(wǎng)站。常規(guī)來講,我們可以在服務(wù)器上創(chuàng)建不同的虛擬機(jī)在不同的虛擬機(jī)上放置不同的應(yīng)用,但是虛擬機(jī)開銷比較高。docker可以實(shí)現(xiàn)虛擬機(jī)隔離應(yīng)用環(huán)境的功能,并且開銷比虛擬機(jī)小,小就意味著省錢了。

2.        你開發(fā)軟件的時(shí)候用的是Ubuntu,但是運(yùn)維管理的都是centos,運(yùn)維在把你的軟件從開發(fā)環(huán)境轉(zhuǎn)移到生產(chǎn)環(huán)境的時(shí)候就會(huì)遇到一些Ubuntu轉(zhuǎn)centos的問題,比如:有個(gè)特殊版本的數(shù)據(jù)庫,只有Ubuntu支持,centos不支持,在轉(zhuǎn)移的過程當(dāng)中運(yùn)維就得想辦法解決這樣的問題。這時(shí)候要是有docker你就可以把開發(fā)環(huán)境直接封裝轉(zhuǎn)移給運(yùn)維,運(yùn)維直接部署你給他的docker就可以了。而且部署速度快。

3.        在服務(wù)器負(fù)載方面,如果你單獨(dú)開一個(gè)虛擬機(jī),那么虛擬機(jī)會(huì)占用空閑內(nèi)存的,docker部署的話,這些內(nèi)存就會(huì)利用起來??傊甦ocker就是集裝箱原理。

 

好了,如果想具體學(xué)習(xí)Docker就看后面的文章吧~

 

頭像
韓梅
60
文章總數(shù)
162246
總閱讀數(shù)