【漫畫】什么是 docker?docker 應(yīng)用場(chǎng)景解析
鄭重聲明:漫畫人物和故事情節(jié)均是原創(chuàng),未經(jīng)同意禁止任何形式的轉(zhuǎn)載,侵權(quán)將進(jìn)入法律程序。大佬除外。

小史是一個(gè)非科班的程序員,雖然學(xué)的是電子專業(yè),但是通過(guò)自己的努力成功通過(guò)了面試,現(xiàn)在要開(kāi)始迎接新生活了。

話說(shuō)小史已經(jīng)接受了A廠的offer,這不,已經(jīng)在公司附近租好了房子,準(zhǔn)備搬家過(guò)去住了。
家里的東西真是多呀,小史的很多家具都是組裝起來(lái)的,現(xiàn)在都已經(jīng)拆散放到呂老師的車上了。
就這樣,呂老師開(kāi)車帶著小史一起去了公司附近的新住址。
開(kāi)了一個(gè)多小時(shí),終于到了新住址。一進(jìn)房間,小史就忙著把心愛(ài)的電腦桌拼起來(lái)。
但是電腦桌拆起來(lái)快,裝起來(lái)可不好裝,幾十個(gè)組件,一百多個(gè)螺絲釘,小史裝了一下午,最后還發(fā)現(xiàn)少了幾個(gè)螺絲釘。

【晚飯】
晚上,小史和呂老師一起吃飯。






【呂老師前傳】
呂老師以前還是程序員的時(shí)候,在B廠上班,有一次一個(gè)新項(xiàng)目要發(fā)布上線。結(jié)果測(cè)試環(huán)境跑得好好的,生產(chǎn)環(huán)境死活跑不起來(lái)。

【docker有啥好】

小史:docker我用過(guò),不過(guò)當(dāng)時(shí)是因?yàn)橐曨l教程里用的docker部署的環(huán)境,所以我也就跟著做了,其實(shí)反而覺(jué)得更麻煩了,它到底哪里好呢?









呂老師:這方面docker做了很多事情,比如提供了基礎(chǔ)鏡像的方式,docker官方的鏡像倉(cāng)庫(kù)里有很多鏡像,可以直接拉下來(lái)用,然后新的鏡像可以以它們?yōu)榛A(chǔ),在上面commit新的東西。


呂老師:同時(shí),docker使用了鏡像分層的技術(shù),新的commit會(huì)產(chǎn)生新的層,可以復(fù)用一部分老的層。這樣一來(lái)制作新鏡像的速度還是挺快的。


小史:我明白你的意思,這樣確實(shí)制作鏡像的時(shí)候可以加快速度,但是假如我要把整個(gè)環(huán)境放到另外一個(gè)機(jī)器部署,還是要拷貝整個(gè)大的鏡像過(guò)去吧?

【dockerfile】

呂老師:你說(shuō)的對(duì),電腦桌不拆,直接放我車上放不下,那么能不能這樣,我們拆的時(shí)候,就把哪個(gè)螺絲在哪里這些細(xì)節(jié)記錄好,到時(shí)候裝的時(shí)候只要按照記錄順序安裝就好。







呂老師:你看,就這個(gè)簡(jiǎn)單的文件。第一行它告訴你這個(gè)鏡像基于ubuntu基礎(chǔ)鏡像,第二行告訴你這個(gè)鏡像的維護(hù)者的信息,第三行的RUN就是要執(zhí)行的shell命令,比如這里,是在ubuntu的基礎(chǔ)鏡像上安裝一些額外的東西,第4行是鏡像啟動(dòng)之后執(zhí)行的初始命令。



【docker最佳實(shí)踐】









呂老師:其實(shí)在網(wǎng)絡(luò)好的情況下,下載一個(gè)鏡像一般來(lái)說(shuō)比重新打一個(gè)鏡像更快,所以最終部署都是基于鏡像去部署,不會(huì)重新打鏡像了。



【docker關(guān)鍵概念】





呂老師:你說(shuō)的沒(méi)錯(cuò),其實(shí)鏡像有點(diǎn)像代碼,容器有點(diǎn)像進(jìn)程。代碼是存放在硬盤上的東西,而把代碼運(yùn)行起來(lái),就會(huì)形成一個(gè)進(jìn)程,進(jìn)程才是跑起來(lái)的程序。

小史:對(duì),你這個(gè)比喻真是貼切,鏡像和容器也是一樣,鏡像是存在硬盤上的東西,鏡像運(yùn)行起來(lái),就形成一個(gè)容器,容器才是真正跑起來(lái)的程序。只不過(guò)在docker中,我們可以進(jìn)入容器,做一些操作,然后再把容器中的改動(dòng)提交形成一個(gè)新的鏡像。


小史:如果說(shuō)鏡像是代碼的話,鏡像倉(cāng)庫(kù)就有點(diǎn)像github了,我們寫好的代碼會(huì)提交到github上面進(jìn)行保存和管理,方便在其他地方也能下載代碼。鏡像倉(cāng)庫(kù)也是類似的,制作好的鏡像,就把它放到鏡像倉(cāng)庫(kù),方便其他人直接用鏡像部署。

【筆記】
聊天結(jié)束后,小史悄悄在手機(jī)中記錄下了這次的筆記。
一、容器技術(shù)docker的思考方式是,將環(huán)境一起打包鏡像,避免部署時(shí)的環(huán)境問(wèn)題。
二、dockerfile記錄鏡像的制作步驟
三、鏡像、容器、倉(cāng)庫(kù)的概念可以類比代碼、進(jìn)程、github
【飯后】
吃完晚飯,小史和呂老師走在大街上,望著天上的星空。





文章整體目錄

如何獲取
很簡(jiǎn)單,在我的微信公眾號(hào)?帥地玩編程?回復(fù)?程序員內(nèi)功修煉?即可獲取《程序員內(nèi)功修煉》第一版和第二版的 PDF。
推薦,推薦一個(gè) GitHub,這個(gè) GitHub 整理了幾百本常用技術(shù)PDF,絕大部分核心的技術(shù)書籍都可以在這里找到,GitHub地址:https://github.com/iamshuaidi/CS-Book(電腦打開(kāi)體驗(yàn)更好),地址閱讀原文直達(dá)
