Docker最全教程——从理论到实战(七)
在本系列教程中,筆者希望將必要的知識點圍繞理論、流程(工作流程)、方法、實踐來進行講解,而不是單純的為講解知識點而進行講解。也就是說,筆者希望能夠讓大家將理論、知識、思想和指導應用到工作的實際場景和實踐之中,而不是拿著字典寫文章,抱著寶典寫代碼。至于很多具體的語法、技術細節,除了常用的知識點,筆者更希望大家閱讀官方文檔——畢竟看官網比看書靠譜多了,官網會一直更新和改進,而書和教程自出版或發布之后,基本上就“死“了。
本系列教程預計全部完成還需要2到3個月的時間。在這個過程中,您可以和我們一起討論、交流和分享這一塊的技術。我們也希望得到大家的支持,請多多點贊,你們的支持是我們前進的最大動力!
?
Docker和持續集成(CI)
?什么是持續集成?
我們先得了解持續集成的相關概念,才能更好地指導開發和使用Docker來改進我們的工作流。和其他教程不一樣,筆者更喜歡將必要的知識點圍繞理論、流程(工作流程)、方法、實踐來進行講解,而不是單純的為講解知識點而進行講解。也就是說,筆者希望為大家打通任督二脈,能夠將理論、知識、思想和指導應用到工作的實際場景和實踐之中,而不是拿著字典寫文章,抱著寶典寫代碼。至于很多具體的語法、技術細節,除了常用的知識點,筆者更希望大家閱讀官方文檔——畢竟看官網比看書靠譜多了,官網會一直更新和改進,而書和教程自出版或發布之后,基本上就“死“了。
好了,我們回到正題。持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
?
徒弟一臉崇拜道:“師父,為什么我做出來的飛劍,一念咒語不是碎了就是爆了呢?”。
師父摸了摸胡子道:“徒兒莫急,冰凍三尺非一日之寒!為師我刻了3年的陣法,練習了3年的咒語,然后又花了3年一起練習,才讓第一把飛劍飛上了太空。我看你天資聰慧,頂多20年就夠了”。
2年后,徒弟邊刻陣法邊念咒,突然飛劍的劍身嗖的一下不見了,只余劍柄。
師父:“徒兒,你的飛劍怎么飛了一截出去了!”
徒弟握著劍柄行禮道:“師父勿怪,這段時間我對飛劍的制作過程進行了改良,一邊刻陣法一邊念咒,現在我對陣法和咒語的掌控都達到了70%,所以只有前半截飛出去了!“
?
注意:集成軟件的過程不是新問題,如果項目開發的規模比較小,比如一個人的項目,如果它對外部系統的依賴很小,那么軟件集成不是問題,但是隨著軟件項目復雜度的增加(即使增加一個人),就會對集成和確保軟件組件能夠在一起工作提出了更多的要求-要早集成,常集成。早集成,頻繁的集成幫助項目在早期發現項目風險和質量問題,如果到后期才發現這些問題,解決問題代價很大,很有可能導致項目延期或者項目失敗。
?
核心價值
?
要素
1.統一的代碼庫
2.自動構建
3.自動測試
4.每個人每天都要向代碼庫主干提交代碼
5.每次代碼遞交后都會在持續集成服務器上觸發一次構建
6.保證快速構建
7.模擬生產環境的自動測試
8.每個人都可以很容易的獲取最新可執行的應用程序
9.每個人都清楚正在發生的狀況
10.自動化的部署
?
原則
1. 所有的開發人員需要在本地機器上做本地構建,然后再提交的版本控制庫中,從而確保他們的變更不會導致持續集成失敗。
2. 開發人員每天至少向版本控制庫中提交一次代碼。
3. 開發人員每天至少需要從版本控制庫中更新一次代碼到本地機器。
4. 需要有專門的集成服務器來執行集成構建,每天要執行多次構建。
5. 每次構建都要100%通過。
6. 每次構建都可以生成可發布的產品。
7. 修復失敗的構建是優先級最高的事情。
8. 測試是未來,未來是測試
?
持續集成我們就先說到這里,建議大家也可以了解下敏捷開發,畢竟持續集成是敏捷開發的基石,但是敏捷開發是一個大命題,這里我們順帶提一下,然后我們還是先繼續本篇教程:
師父:“徒兒,你真的在短短3年就讓飛劍飛起來了?”。
徒弟:“弟子愚鈍,在刻劍的過程中倍覺無聊,又不喜歡哼歌,于是索性邊練咒邊刻劍。后面徒兒發現,如果刻錯了或者念錯了,飛劍就會提前直接爆炸,雖然每次炸的內褲都沒了,但是能夠盡早發現錯誤。所以徒弟才能一日千里”。
師父摸了摸胡須道:“然來如此!不過,這就是你大庭廣眾之下裸奔的借口!!?”
?
Docker和持續集成(CI)
?
相比其他技術,Docker在持續集成(CI)這塊有著先天的優勢。在通常的情況下,我們要實現持續集成往往會遇到以下問題:
l?復雜的依賴關系
不同的項目環境,不同的語言,不同的程序包依賴,甚至是操作系統的依賴等等,都會影響到我們持續集成的自動化腳本的執行。而且依賴包之間的兼容性,版本的兼容性,間接依賴或者多重依賴等問題等等,對于開發和運維來說,都是一個噩夢。就如以下對話:
徒弟:“師父,我按照您教的方式念咒,為什么飛劍飛起來了之后就收不回來了?”。
師父直接一巴掌,說:“兔崽子,上次就和你說了,咒語現在最低的兼容級別是——普通話二級乙等!誰教你說長沙話的!”
?
l?不一致的環境
在通常的環境中,我們需要準備好開發、測試和生產環境,往往開發環境隨便開發人員折騰,有時候操作系統或者依賴軟件的版本的區別、組件的不同、配置不一樣,都足夠讓開發環境正常運行的程序在測試環境上跑不起來,造成測試人員和開發人員的故意傷害事件,導致“行兇人員”后悔終生,感悟到“沖動就是魔鬼”的箴言。我們還是以對話來闡述這個問題:
徒弟拿出普通話二級乙等證書道:“師父,我苦學普通話,終于達到普通話二級乙等。然后按照您教的方式念咒了,之后為什么飛劍飛起來了之后還是沒法收回來?”。
師父又是一巴掌,說:“兔崽子,你沒看到下雨了么?”
徒弟弱弱的問:“這個和下雨有關系么?是不是雨天法術受雨滴干擾,咒語的效果受到影響呢?”
師父指著外面道:“瞎了?你丫的不趕緊把被子收回來烘干,你的飛劍就甭想要了!”
?
l?應用架構的復雜性和配置的多樣性
現在的系統架構越來越復雜,甚至由多種開發語言組成,而且包含前后端等多方面內容。這些可能會導致其部署方式的不同以及配置的復雜性。并且一個系統維護到后面,往往有很多歷史遺留問題,比如那各種配置文件和配置方式,各種補丁,各種腳本等等。這些因素會導致自動化流程會非常麻煩和艱難。我們繼續來一段對話:
?
徒弟:“師父,被子收好了,但是飛劍越飛越遠了,是不是可以教我收回我的飛劍啦!”。
師父張開一只眼:“小崽子,普通話念完后,用長沙話再念一遍收劍咒!前幾天,為師對收劍咒又進行了改造。”
徒弟用長沙話念完,飛劍還是再天空中亂竄,并沒有降下來的意思。徒弟趕緊問道:“師父,為啥還是不行呢?”
師父彈了彈手指,遠處一根若隱若現的細線展現出來,師父指著那根線說:“看到那邊那根線沒?還不趕緊去追!”
?
相比這些問題,Docker實現持續集成(CI)就方便多了。
首先,Docker可以讓我們非常容易和方便地以“容器化”的方式去部署應用。它就像集裝箱一樣,打包了所有依賴,再在其他服務器上部署很容易,不至于換服務器后發現各種配置文件散落一地,這樣就解決了編譯時依賴和運行時依賴的問題。
其次,Docker的隔離性使得應用在運行時就像處于沙箱中,每個應用都認為自己是在系統中唯一運行的程序,這樣就可以很方便地在一個系統中部署多種不同環境來解決依賴復雜度的問題。
正因為Docker是以應用為中心,鏡像中打包了應用及應用所需的環境,一次構建,處處運行。這種特性完美解決了傳統模式下應用遷移后面臨的環境不一致問題。
因此使用Docker實現持續集成,我們可以使用一些簡單的免費的工具即可實現,也可以非常方便的自己搭建集成環境或者編寫腳本實現。比如Azure?DevOps、Tencent?Hub、Jenkins和TeamCity,接下來我們會逐步進行介紹。
持續集成工作流程
一般情況下,持續集成的流程如下所示:
下面是一個參考流程:
代碼版本管理,我們推薦使用Git。關于git版本庫的使用,我這里就不啰嗦了,如果有朋友感興趣,我也可以分享一些內容。
后續,我們將會分享使用相關工具來實施我們的CI流程。
?
往期內容鏈接
Docker最全教程——從理論到實戰(一)Docker最全教程——從理論到實戰(二)
Docker最全教程——從理論到實戰(三)Docker最全教程——從理論到實戰(四)
Docker最全教程——從理論到實戰(五) Docker最全教程——從理論到實戰(六)我的博客即將同步至騰訊云+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=1uzymsc0hstza posted on 2019-01-14 11:44 NET未來之路 閱讀(...) 評論(...) 編輯 收藏
轉載于:https://www.cnblogs.com/lonelyxmas/p/10266008.html
總結
以上是生活随笔為你收集整理的Docker最全教程——从理论到实战(七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用什么软件录屏最好?录制高清视频无水印,
- 下一篇: 另一个域的cookie_一定要知道的第一