張大胖的Docker之路
1.悲催的開(kāi)發(fā)環(huán)境配置
張大胖如愿跳到了這家新公司的研發(fā)部門(mén),他摩拳擦掌,準(zhǔn)備大顯身手。
按照入職的慣例, 配置一個(gè)本地的開(kāi)發(fā)環(huán)境必不可少。 興沖沖的大胖看到組長(zhǎng)發(fā)過(guò)來(lái)的配置文檔,不僅倒吸了一口涼氣 :竟然有幾十頁(yè)之多 !
細(xì)細(xì)一看, 足足有48個(gè)步驟, 我的天吶!
組內(nèi)的老人們對(duì)新人投來(lái)了憐憫的目光, 其中不乏夾雜著幸災(zāi)樂(lè)禍, 似乎想起了本人剛?cè)肼殨r(shí)配置環(huán)境那慘不忍睹的時(shí)光。
大胖做了一次深呼吸,定了定神,正式開(kāi)始苦難的歷程。
從SVN上下載代碼, 解決編譯錯(cuò)誤, 咦,怎么缺少這么多的jar 文件?
好心老梁趕緊說(shuō): 我把jar文件發(fā)給你, 那個(gè)配置文檔太老了, 有 兩年都沒(méi)人更新了。
大胖心里一聲嘆息,但是他很細(xì)心,一邊配置環(huán)境,還一邊修改文檔。
他立志要搞一個(gè)最新版的出來(lái): 從我開(kāi)始, 后面的新人再也不用受折磨了。
可是談何容易, 缺失的jar 文件還好辦, 設(shè)置好Build Path以后把他們都commit到SVN上, 下次再有人下載,編譯的依賴(lài)就自動(dòng)解決了。
其他的就有點(diǎn)麻煩了,安裝nginx , tomcat ,mysql, redis .... 哪個(gè)都不是省油的燈, 安裝路徑的選擇、配置文件的修改,端口的設(shè)定, 最后還得把它們連起來(lái)。
經(jīng)過(guò)九九八十一難, 終于到了文檔的最后一步: 運(yùn)行。
不過(guò)所料, 控制臺(tái)一大堆錯(cuò)誤信息觸目驚心, 似乎在嘲笑每個(gè)新人的無(wú)能。
大胖心中一萬(wàn)只神獸奔騰而過(guò), 他感到了強(qiáng)烈的無(wú)助感。
老梁坐著那高檔的程序員專(zhuān)用椅滑了過(guò)來(lái): “怎么樣? 滋味不好受吧, 要不要我?guī)湍阋幌?”
張大胖還能說(shuō)什么, 老將出馬,一個(gè)頂倆。
可是這一次老司機(jī)也翻車(chē)了, 老梁折騰了很久, 滿(mǎn)頭大漢 , 總是有一個(gè)運(yùn)行時(shí)錯(cuò)誤解決不了。
臨近中午, 老梁說(shuō): 算了, 先去填飽肚子吧。
大胖下午繼續(xù)抖擻精神,把上午安裝的系統(tǒng)刪掉,重新再來(lái)一遍, 小樣, 不信我搞不定你。
3個(gè)小時(shí)過(guò)去了, 到了運(yùn)行的時(shí)候,還是同樣的錯(cuò)誤。
第二天再來(lái)一遍, 還是同樣錯(cuò)誤! 難道是人品問(wèn)題? 本來(lái)想大顯身手,展示自己深厚的編程功底, 沒(méi)想到在這個(gè)小陰溝里一直出不來(lái)了。
第三天,大胖干脆把機(jī)器格式化了, 看成敗,人生豪邁, 只不過(guò)是從頭再來(lái)。
這一回老梁也在旁邊盯著, 結(jié)對(duì)配置, 每一條配置命令都被仔細(xì)檢查了100遍, 到了中午時(shí)分, 大胖熱淚盈眶的看到 : 系統(tǒng)終于可以跑起來(lái)了!
2.配置一次,到處運(yùn)行
所有的坑都找到了, 所有的坑都被填上了。
張大胖也陷入了沉思: 這個(gè)過(guò)程是在是太痛苦了, 怎么才能改進(jìn)一下?
這么多步驟,這么多配置, 要是事先都弄好了, 直接拿過(guò)來(lái)用該多好!
大胖靈機(jī)一動(dòng) :把這些配置好的Tomcat, Mysql, Redis...... 之流搞到一個(gè)虛擬機(jī)中不行嗎? 新人來(lái)了, 直接下載一個(gè)配置好的虛擬機(jī), 開(kāi)箱即用, 再也不用理會(huì)這么多啰里啰嗦的細(xì)節(jié)了。
張大胖是個(gè)實(shí)干家,馬上卷起袖子實(shí)驗(yàn), 可是結(jié)果卻不盡如人意。 一是虛擬機(jī)太大,二是慢的要死, 這都喝了3杯咖啡了還沒(méi)啟動(dòng)完。
一次偶然的機(jī)會(huì), 張大胖聽(tīng)到同事們?cè)诹腄ocker, 簡(jiǎn)單的看了下相關(guān)的資料,他馬上聯(lián)想到, 既然虛擬機(jī)這么笨重, 何不用輕量級(jí)的Docker來(lái)解決問(wèn)題呢?
和虛擬機(jī)一樣, 把Tomcat, Mysql , Redis這些軟件先配置好,形成一個(gè)項(xiàng)目特有的docker的鏡像, 任何人只要得到這個(gè)鏡像就可以用docker 引擎運(yùn)行起來(lái),形成一個(gè)容器,對(duì)外提供服務(wù)。
張大胖迅速?lài)L試了一下,果然是輕量級(jí), 運(yùn)行起來(lái)像閃電一般,起身倒茶的功夫就啟動(dòng)完成了。
老梁很贊賞大胖這種實(shí)干的精神,把外界流行的技術(shù)引入項(xiàng)目中來(lái), 既學(xué)了新技術(shù), 又提高了生產(chǎn)效率, 一舉兩得,雙贏。
老梁自告奮勇做了第一個(gè)測(cè)試用戶(hù),也是異常的順利,真是Build Once, Run Anyware啊, 于是docker 慢慢的在項(xiàng)目組中流行開(kāi)來(lái)。
3.穩(wěn)定壓倒一切
在項(xiàng)目的周例會(huì)上,張大胖又提出了一個(gè)新想法 : “既然我們開(kāi)發(fā)都開(kāi)始用docker了, 能不能把測(cè)試環(huán)境甚至生產(chǎn)環(huán)境也都改變成docker ? 這樣以來(lái)部署應(yīng)用程序就很方便了, 直接把鏡像運(yùn)行起來(lái)就可以了。”
開(kāi)發(fā)組的人紛紛贊同,想想將來(lái)只需要把一個(gè)鏡像放到生產(chǎn)環(huán)境就可以部署了,多么美好的前景啊。
但是負(fù)責(zé)運(yùn)維的老王表示反對(duì): “這沒(méi)必要吧? 三年前我們已經(jīng)把生產(chǎn)環(huán)境給搭好了, 一直以來(lái)都沒(méi)什么變化, 你說(shuō)的那些本地的配置問(wèn)題,在生產(chǎn)環(huán)境上根本就不存在, 為什么要用docker 這個(gè)新技術(shù)? 搞壞了生產(chǎn)環(huán)境誰(shuí)負(fù)責(zé)?”
看來(lái)老王是很抵觸啊, 張大胖想,不過(guò)也難怪,生產(chǎn)環(huán)境,穩(wěn)定壓倒一切。
想想也是,生產(chǎn)環(huán)境都配置好了,現(xiàn)在升級(jí)應(yīng)用無(wú)非就是把web代碼,數(shù)據(jù)庫(kù)的sql 交由老王去執(zhí)行,大部分情況下還是自動(dòng)化的, 改動(dòng)配置的機(jī)會(huì)寥寥無(wú)幾,必要性確實(shí)不太大。
不過(guò)老王也是很開(kāi)明的, 他接著說(shuō): “你們不是在搞一個(gè)新的項(xiàng)目嗎, 可以拿它來(lái)嘗試一下啊, 開(kāi)發(fā),測(cè)試,生產(chǎn)全部都用docker, 如果確實(shí)是可以平滑的過(guò)渡, 那以后我們就推而廣之。 ”
老梁說(shuō):“ 沒(méi)錯(cuò), 新技術(shù)嘗試,慢慢來(lái)吧。"
雖然沒(méi)有爭(zhēng)取到生產(chǎn)環(huán)境也使用docker, 但張大胖對(duì)docker是越來(lái)越喜歡了, 他還額外發(fā)現(xiàn)了docker 的另外一個(gè)好處,那就是可以輕松地嘗試新的技術(shù)。
原來(lái)想折騰一個(gè)新玩意, 在遇到依賴(lài)的情況下,特別麻煩,一個(gè)包接一個(gè)包的下載, 如果遇到被墻,那更是痛不欲生。 現(xiàn)在只需要下載一個(gè)包含新技術(shù)/新工具的鏡像,運(yùn)行起來(lái)即可, 實(shí)在是太體貼了!
不僅如此,有一次客戶(hù)要求演示正在開(kāi)發(fā)中的新項(xiàng)目, 往日按照項(xiàng)目經(jīng)理的要求,搞一個(gè)可用的演示系統(tǒng)那可是費(fèi)了勁了,現(xiàn)在只需要把鏡像copy給項(xiàng)目經(jīng)理,直接就可以用了, 真是方便。
Build once , run anyware, 張大胖算是體會(huì)到了。
后記:本文主要講了docker的一個(gè)應(yīng)用場(chǎng)景: 簡(jiǎn)化環(huán)境的配置,docker 還有很多其他優(yōu)點(diǎn),例如docker和微服務(wù)就是一對(duì)好基友, 感興趣的同學(xué)可以看一看。
此外,當(dāng)你試圖引入一個(gè)新技術(shù)到項(xiàng)目的時(shí)候, 一定要看看新技術(shù)能解決什么問(wèn)題, 能給項(xiàng)目組帶來(lái)什么價(jià)值, 這樣更容易成功。
【本文為51CTO專(zhuān)欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】