天天看點

碼農小馬與 Docker 不得不說的故事

作者:徐西甯,2006年畢業于華中科技大學,先後供職于上海三家知名和非知名外企,精通Java, Python/Django, Javascriptde.js, Docker和Test Automation. MDCC 2016大會講師,開源項目LEP前端架構師。

我叫小馬,

碼農的馬,

我是一個碼農。

碼農小馬與 Docker 不得不說的故事

作為碼農,我曾經有一個夢想:發财。很快,現實給了我幾個耳光,我明智地放棄了這個想法。

碼農小馬與 Docker 不得不說的故事

作為碼農,我還有第二個夢想:用優雅的代碼解決實際問題!

碼農小馬與 Docker 不得不說的故事

我的工作是用Django做Web開發。老闆說,Python很簡潔,Django很高效,是Web開發的很好的選擇。

碼農小馬與 Docker 不得不說的故事

老闆雖然經常忽悠我,但是,這一次他沒有。用Django做Web開發真的很高效,實作Feature的速度飛快。我感覺離第二個夢想近了一步。

碼農小馬與 Docker 不得不說的故事

Web開發的疊代很快,每次有新的feature,或者有bug fix, 我都需要重新部署測試伺服器,交給小Q去測試。

小Q,QA,女,測試的高手,代碼的白癡。

小Q總能找出我代碼中的Bug,讓我明白我還沒有做到用代碼優雅地解決問題,這讓我很惱火。同時,因為她不懂代碼,不知道我的代碼的依賴環境,是以,重新部署測試伺服器的活,就一直落在我身上。

碼農小馬與 Docker 不得不說的故事

雖然小Q明眸善睐,我也願意有機會跟她多唠幾句。但是,部署測試伺服器這事頻繁發生,我也有忙不過來的時候。于是,我寫了一個文檔,當我實在忙的時候,小Q以及其他人也可以照這個文檔來做部署。

在我眼裡,這個文檔就兩步:

在小Q眼裡,這個文檔是天龍88步:

在新來的實習生看來,這個文檔是迷蹤步:

碼農小馬與 Docker 不得不說的故事

當大家看不懂這個文檔,或者照着文檔操作碰到問題的時候,還是會來問我,這顯得我比較重要。但是,我的時間不斷地被打斷,這讓我很難專注敲代碼,更别說敲出“優雅的代碼”。

于是,我把這個文檔的步驟用Shell腳本實作出來,這樣,大家就不用閱讀那個天龍88步的文檔,隻要跑一下這個腳本就好了。生活一下子美好了很多。

碼農小馬與 Docker 不得不說的故事

哪知道,快樂的日子永遠是短暫的,留下的隻是無窮無盡的痛苦和長歎。

用腳本實作了自動化部署,也有人抱怨說腳本不會用。于是,我寫了一個文檔,教大家如何用這個腳本。

碼農的世界就是這麼殘酷,我寫腳本的本意就是不要再寫文檔,現在,我既要維護腳本,還要維護文檔。

碼農小馬與 Docker 不得不說的故事

事實證明,這個腳本還是能發揮作用,節省了大家很多時間。大家喜歡這個腳本,也提出了更多需求,于是,我花了更多的時間,讓這個腳本能處理更多的情況,變得更強大,當然也更複雜。我在碼Feature之外,還需要騰出更多時間維護這個腳本。

碼農小馬與 Docker 不得不說的故事

運維的兄弟小O也開始用這個腳本在生産伺服器上進行部署。但是,他面臨的條件更加險惡,因為生産伺服器上還運作着一些曆史版本,這些曆史版本跟現在的版本的依賴環境還有一些沖突,小O需要更加小心翼翼,戰戰兢兢,如履薄冰。

雖說那是小O的活,但是,作為一個有責任心的碼農,我也不忍心看着兄弟掙紮不是?

都是勞動人民,我們要團結友愛。我們的目标是把麻煩解決好,而不是推卸出去。

碼農小馬與 Docker 不得不說的故事

寫更高品質的腳本,寫更完善的文檔,顯然并不能解決這個問題。我的解決方案是:Docker!

Docker是一個輕量化的虛拟平台,可以讓我很容易地把我的程式、我的程式配置、我的程式的依賴環境都封裝在一個獨立的程式包中,這個程式包被稱為Docker Image. 任何安裝了Docker的系統上(無論是Windows, Mac OS, Linux), 都可以輕易地運作我的程式,不用再操心配置,不用再操心環境依賴以及跟現有環境之間可能的沖突,Docker能夠保證程式可運作,以及在不同環境下行為的一緻性。

因為Docker的引入,測試小Q可以很輕松地搞定測試的環境,運維小O可以輕松地搞定生産環境的部署,而我,能夠有更多的時間寫“優雅的代碼”。

這才是多方共赢!從此,小馬,小Q和小O幸福地工作在一起!

我叫小馬 碼農的馬 我是一個碼農 我擁抱Docker ”