當(dāng)前位置:首頁 > 公眾號(hào)精選 > 程序員小灰
[導(dǎo)讀]作為程序員我們應(yīng)怎樣理解docker? 容器技術(shù)的起源 假設(shè)你們公司正在秘密研發(fā)下一個(gè)“今日頭條”APP,我們姑且稱為明日頭條,程序員自己從頭到尾搭建了一套環(huán)境開始寫代碼,寫完代碼后程序員要把代碼交給測試同學(xué)測試,這時(shí)測試同學(xué)開始從頭到尾搭建這套環(huán)境

ck;line-height: 0;box-sizing: border-box;">

作為程序員我們應(yīng)怎樣理解docker?


容器技術(shù)的起源

假設(shè)你們公司正在秘密研發(fā)下一個(gè)“今日頭條”APP,我們姑且稱為明日頭條,程序員自己從頭到尾搭建了一套環(huán)境開始寫代碼,寫完代碼后程序員要把代碼交給測試同學(xué)測試,這時(shí)測試同學(xué)開始從頭到尾搭建這套環(huán)境,測試過程中出現(xiàn)問題程序員也不用擔(dān)心,大可以一臉無辜的撒嬌,“明明在人家的環(huán)境上可以運(yùn)行的”。

測試同學(xué)測完后終于可以上線了,這時(shí)運(yùn)維同學(xué)又要重新從頭到尾搭建這套環(huán)境,費(fèi)了九牛二虎之力搭建好環(huán)境開始上線,糟糕,上線系統(tǒng)就崩潰了,這時(shí)心理素質(zhì)好的程序員又可以施展演技了,“明明在人家的環(huán)境上可以運(yùn)行的”。

從整個(gè)過程可以看到,不但我們重復(fù)搭建了三套環(huán)境還要迫使程序員轉(zhuǎn)行演員浪費(fèi)表演才華,典型的浪費(fèi)時(shí)間和效率,聰明的程序員是永遠(yuǎn)不會(huì)滿足現(xiàn)狀的,因此又到了程序員改變世界的時(shí)候了,容器技術(shù)應(yīng)運(yùn)而生。

有的同學(xué)可能會(huì)說:“等等,先別改變世界,我們有虛擬機(jī)啊,VMware好用的飛起,先搭好一套虛擬機(jī)環(huán)境然后給測試和運(yùn)維clone出來不就可以了嗎?”

在沒有容器技術(shù)之前,這確實(shí)是一個(gè)好辦法,只不過這個(gè)辦法還沒有那么好。

先科普一下,現(xiàn)在云計(jì)算其底層的基石就是虛擬機(jī)技術(shù),云計(jì)算廠商買回來一堆硬件搭建好數(shù)據(jù)中心后使用虛擬機(jī)技術(shù)就可以將硬件資源進(jìn)行切分了,比如可以切分出100臺(tái)虛擬機(jī),這樣就可以賣給很多用戶了。

你可能會(huì)想這個(gè)辦法為什么不好呢?


容器技術(shù) vs 虛擬機(jī)

我們知道和一個(gè)單純的應(yīng)用程序相比,操作系統(tǒng)是一個(gè)很重而且很笨的程序,簡稱笨重,有多笨重呢?

我們知道操作系統(tǒng)運(yùn)行起來是需要占用很多資源的,大家對(duì)此肯定深有體會(huì),剛裝好的系統(tǒng)還什么都沒有部署,單純的操作系統(tǒng)其磁盤占用至少幾十G起步,內(nèi)存要幾個(gè)G起步。

假設(shè)我有一臺(tái)機(jī)器,16G內(nèi)存,需要部署三個(gè)應(yīng)用,那么使用虛擬機(jī)技術(shù)可以這樣劃分:

在這臺(tái)機(jī)器上開啟三個(gè)虛擬機(jī),每個(gè)虛擬機(jī)上部署一個(gè)應(yīng)用,其中VM1占用2G內(nèi)存,VM2占用1G內(nèi)存,VM3占用了4G內(nèi)存。

我們可以看到虛擬本身就占據(jù)了總共7G內(nèi)存,因此我們沒有辦法劃分出更多虛擬機(jī)從而部署更多的應(yīng)用程序,可是我們部署的是應(yīng)用程序,要用的也是應(yīng)用程序而不是操作系統(tǒng)。

如果有一種技術(shù)可以讓我們避免把內(nèi)存浪費(fèi)在“無用”的操作系統(tǒng)上豈不是太香?這是問題一,主要原因在于操作系統(tǒng)太重了。

還有另一個(gè)問題,那就是啟動(dòng)時(shí)間問題,我們知道操作系統(tǒng)重啟是非常慢的,因?yàn)椴僮飨到y(tǒng)要從頭到尾把該檢測的都檢測了該加載的都加載上,這個(gè)過程非常緩慢,動(dòng)輒數(shù)分鐘,因此操作系統(tǒng)還是太笨了。

那么有沒有一種技術(shù)可以讓我們獲得虛擬機(jī)的好處又能克服這些缺點(diǎn)從而一舉實(shí)現(xiàn)魚和熊掌的兼得呢?

答案是肯定的,這就是容器技術(shù)。


什么是容器

容器一詞的英文是container,其實(shí)container還有集裝箱的意思,集裝箱絕對(duì)是商業(yè)史上了不起的一項(xiàng)發(fā)明,大大降低了海洋貿(mào)易運(yùn)輸成本。讓我們來看看集裝箱的好處:

  •  集裝箱之間相互隔離

  •  長期反復(fù)使用

  •  快速裝載和卸載

  •  規(guī)格標(biāo)準(zhǔn),在港口和船上都可以擺放

回到軟件中的容器,其實(shí)容器和集裝箱在概念上是很相似的。

現(xiàn)代軟件開發(fā)的一大目的就是隔離,應(yīng)用程序在運(yùn)行時(shí)相互獨(dú)立互不干擾,這種隔離實(shí)現(xiàn)起來是很不容易的,其中一種解決方案就是上面提到的虛擬機(jī)技術(shù),通過將應(yīng)用程序部署在不同的虛擬機(jī)中從而實(shí)現(xiàn)隔離。

但是虛擬機(jī)技術(shù)有上述提到的各種缺點(diǎn),那么容器技術(shù)又怎么樣呢?

與虛擬機(jī)通過操作系統(tǒng)實(shí)現(xiàn)隔離不同,容器技術(shù)只隔離應(yīng)用程序的運(yùn)行時(shí)環(huán)境但容器之間可以共享同一個(gè)操作系統(tǒng),這里的運(yùn)行時(shí)環(huán)境指的是程序運(yùn)行依賴的各種庫以及配置。

從圖中我們可以看到容器更加的輕量級(jí)且占用的資源更少,與操作系統(tǒng)動(dòng)輒幾G的內(nèi)存占用相比,容器技術(shù)只需數(shù)M空間,因此我們可以在同樣規(guī)格的硬件上大量部署容器,這是虛擬機(jī)所不能比擬的,而且不同于操作系統(tǒng)數(shù)分鐘的啟動(dòng)時(shí)間容器幾乎瞬時(shí)啟動(dòng),容器技術(shù)為打包服務(wù)棧提供了一種更加高效的方式,So cool。

那么我們該怎么使用容器呢?這就要講到docker了。

注意,容器是一種通用技術(shù),docker只是其中的一種實(shí)現(xiàn)。


什么是docker

docker是一個(gè)用Go語言實(shí)現(xiàn)的開源項(xiàng)目,可以讓我們方便的創(chuàng)建和使用容器,docker將程序以及程序所有的依賴都打包到docker container,這樣你的程序可以在任何環(huán)境都會(huì)有一致的表現(xiàn),這里程序運(yùn)行的依賴也就是容器就好比集裝箱,容器所處的操作系統(tǒng)環(huán)境就好比貨船或港口,程序的表現(xiàn)只和集裝箱有關(guān)系(容器),和集裝箱放在哪個(gè)貨船或者哪個(gè)港口(操作系統(tǒng))沒有關(guān)系。

因此我們可以看到docker可以屏蔽環(huán)境差異,也就是說,只要你的程序打包到了docker中,那么無論運(yùn)行在什么環(huán)境下程序的行為都是一致的,程序員再也無法施展表演才華了,不會(huì)再有“在我的環(huán)境上可以運(yùn)行”,真正實(shí)現(xiàn)“build once, run everywhere”。

此外docker的另一個(gè)好處就是快速部署,這是當(dāng)前互聯(lián)網(wǎng)公司最常見的一個(gè)應(yīng)用場景,一個(gè)原因在于容器啟動(dòng)速度非常快,另一個(gè)原因在于只要確保一個(gè)容器中的程序正確運(yùn)行,那么你就能確信無論在生產(chǎn)環(huán)境部署多少都能正確運(yùn)行。


如何使用docker

docker中有這樣幾個(gè)概念:

  • dockerfile

  • image

  • container

實(shí)際上你可以簡單的把image理解為可執(zhí)行程序,container就是運(yùn)行起來的進(jìn)程。

那么寫程序需要源代碼,那么“寫”image就需要dockerfile,dockerfile就是image的源代碼,docker就是"編譯器"。

因此我們只需要在dockerfile中指定需要哪些程序、依賴什么樣的配置,之后把dockerfile交給“編譯器”docker進(jìn)行“編譯”,也就是docker build命令,生成的可執(zhí)行程序就是image,之后就可以運(yùn)行這個(gè)image了,這就是docker run命令,image運(yùn)行起來后就是docker container。

具體的使用方法就不再這里贅述了,大家可以參考docker的官方文檔,那里有詳細(xì)的講解。


docker是如何工作的

實(shí)際上docker使用了常見的CS架構(gòu),也就是client-server模式,docker client負(fù)責(zé)處理用戶輸入的各種命令,比如docker build、docker run,真正工作的其實(shí)是server,也就是docker demon,值得注意的是,docker client和docker demon可以運(yùn)行在同一臺(tái)機(jī)器上。

接下來我們用幾個(gè)命令來講解一下docker的工作流程:


1,docker build

當(dāng)我們寫完dockerfile交給docker“編譯”時(shí)使用這個(gè)命令,那么client在接收到請求后轉(zhuǎn)發(fā)給docker daemon,接著docker daemon根據(jù)dockerfile創(chuàng)建出“可執(zhí)行程序”image。


2,docker run

有了“可執(zhí)行程序”image后就可以運(yùn)行程序了,接下來使用命令docker run,docker daemon接收到該命令后找到具體的image,然后加載到內(nèi)存開始執(zhí)行,image執(zhí)行起來就是所謂的container。


3,docker pull

其實(shí)docker build和docker run是兩個(gè)最核心的命令,會(huì)用這兩個(gè)命令基本上docker就可以用起來了,剩下的就是一些補(bǔ)充。

那么docker pull是什么意思呢?

我們之前說過,docker中image的概念就類似于“可執(zhí)行程序”,我們可以從哪里下載到別人寫好的應(yīng)用程序呢?很簡單,那就是APP Store,即應(yīng)用商店。與之類似,既然image也是一種“可執(zhí)行程序”,那么有沒有"Docker Image Store"呢?答案是肯定的,這就是Docker Hub,docker官方的“應(yīng)用商店”,你可以在這里下載到別人編寫好的image,這樣你就不用自己編寫dockerfile了。

docker registry 可以用來存放各種image,公共的可以供任何人下載image的倉庫就是docker Hub。那么該怎么從Docker Hub中下載image呢,就是這里的docker pull命令了。

因此,這個(gè)命令的實(shí)現(xiàn)也很簡單,那就是用戶通過docker client發(fā)送命令,docker daemon接收到命令后向docker registry發(fā)送image下載請求,下載后存放在本地,這樣我們就可以使用image了。

最后,讓我們來看一下docker的底層實(shí)現(xiàn)。


docker的底層實(shí)現(xiàn)

docker基于Linux內(nèi)核提供這樣幾項(xiàng)功能實(shí)現(xiàn)的:

  • NameSpace

    我們知道Linux中的PID、IPC、網(wǎng)絡(luò)等資源是全局的,而NameSpace機(jī)制是一種資源隔離方案,在該機(jī)制下這些資源就不再是全局的了,而是屬于某個(gè)特定的NameSpace,各個(gè)NameSpace下的資源互不干擾,這就使得每個(gè)NameSpace看上去就像一個(gè)獨(dú)立的操作系統(tǒng)一樣,但是只有NameSpace是不夠。

  • Control groups

    雖然有了NameSpace技術(shù)可以實(shí)現(xiàn)資源隔離,但進(jìn)程還是可以不受控的訪問系統(tǒng)資源,比如CPU、內(nèi)存、磁盤、網(wǎng)絡(luò)等,為了控制容器中進(jìn)程對(duì)資源的訪問,Docker采用control groups技術(shù)(也就是cgroup),有了cgroup就可以控制容器中進(jìn)程對(duì)系統(tǒng)資源的消耗了,比如你可以限制某個(gè)容器使用內(nèi)存的上限、可以在哪些CPU上運(yùn)行等等。

有了這兩項(xiàng)技術(shù),容器看起來就真的像是獨(dú)立的操作系統(tǒng)了。


總結(jié)

docker是目前非常流行的技術(shù),很多公司都在生產(chǎn)環(huán)境中使用,但是docker依賴的底層技術(shù)實(shí)際上很早就已經(jīng)出現(xiàn)了,現(xiàn)在以docker的形式重新煥發(fā)活力,并且能很好的解決面臨的問題,希望本文能對(duì)大家理解docker有所幫助。


—————END—————



喜歡本文的朋友,歡迎關(guān)注公眾號(hào) 程序員小灰,收看更多精彩內(nèi)容

        
點(diǎn)個(gè)[在看],是對(duì)小灰最大的支持!


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!

ckquote>
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉