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