Docker容器实战思维
生活随笔
收集整理的這篇文章主要介紹了
Docker容器实战思维
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Docker成功的基礎(chǔ)
- Docker的實現(xiàn)用到的基礎(chǔ)技術(shù)(cgroups, namespace,分層文件系統(tǒng))在Docker之前已經(jīng)存在很多年,并且 Linux Containers(LXC)也在很多企業(yè)的環(huán)境中得到了大量的應(yīng)用實踐,并得到明顯優(yōu)勢。Google大規(guī)模容器集群的性能比傳統(tǒng)虛擬機也要高很多,接近bare Metal。與傳統(tǒng)虛擬機相比,容器集群讓公司擁有秒級別而非分鐘級別的彈性計算伸縮能力,同事使用更少的機器運行更多實例。
- Docker的優(yōu)勢:Docker首次創(chuàng)造了一種簡單容易運行的并且覆蓋應(yīng)用全生命周期的工作流,用戶可以通過簡單指令或者Restful API來拉取,打包,運行,維護(hù)容器。這種簡單化從根本上降低了應(yīng)用程序不是的難度,極大提高了應(yīng)用運行時環(huán)境的不是,維護(hù)的效率。用戶可以不依賴類似Ansible, Chef,Puppet這類的配置管理和發(fā)布系統(tǒng),不需要再部署中同事光之基礎(chǔ)系統(tǒng)與軟件的安裝配置,以及應(yīng)用的安裝調(diào)試。
- Docker提高統(tǒng)一實踐方法,每個服務(wù)(或應(yīng)用)維護(hù)一個Dockerfile文件,即使用編排工具如Docker Compose,一個服務(wù)(或應(yīng)用)也只需要維護(hù)一個docker-compose.yml文件。應(yīng)用程序及其運行時環(huán)境全部打包到一個簡單易讀的Dockerfile或者Compose文件,開發(fā)團(tuán)隊和運維團(tuán)隊可以透明的合作維護(hù)這個文件,極大降低了溝通成本與部署成本,極大滿足了研發(fā)團(tuán)隊與DevOps(開發(fā)運維一體化)團(tuán)隊,運維團(tuán)隊之間的溝通需求,清晰劃分了責(zé)任邊界。
研發(fā)人員眼中的容器
- 快速上手新的技術(shù):新技術(shù)起點都是從Demo開始,學(xué)習(xí)新系統(tǒng)標(biāo)準(zhǔn)思路:最小系統(tǒng)原則,從變量最少的系統(tǒng)開始,循序漸進(jìn)的學(xué)習(xí)
- 通過Docker使用,用戶可以將精力和注意力都盡可能放在語言本生學(xué)習(xí)上,而無需折騰系統(tǒng)環(huán)境的各種配置。Docker官網(wǎng)口號就包含了以上含義:Build,Ship and Run Any App,Anywhere,即任何應(yīng)用都可以構(gòu)建,發(fā)布,運行與任何環(huán)境,Docker將環(huán)境的影響因素降至最低,使開發(fā)者能統(tǒng)一的掌握整個應(yīng)用的生命周期。
容器化的代碼倉庫
- 我們可以將平時積累的特定功能化的Docker容器提交到自己的容器倉庫中,這樣在接新的系統(tǒng)時候,可以快速規(guī)劃所需要的資源,并在最短時間內(nèi)利用積累的模塊搭建起系統(tǒng),從而可以快速完成任務(wù),另外研發(fā)過程中的各種發(fā)布版本,也可以用Docker容器的方式保存,以后遇到類似需求,可以直接運行,調(diào)試并且復(fù)用代碼。
面向業(yè)務(wù)編程
- 開發(fā)工作中,除了算法之類,在本質(zhì)上是解決業(yè)務(wù)問題,滿足需求方的要求。所有能快速掌握新的業(yè)務(wù)需求和新的技術(shù)棧,是對一個有效技術(shù)人員迫切的要求。
- 使用Docker快速掌握新技術(shù)要點并完成適當(dāng)?shù)募夹g(shù)儲備。假定讀者是Python技術(shù)棧后端,實現(xiàn)網(wǎng)站后臺的建設(shè),那如何快速實現(xiàn)移動應(yīng)用的Restful Api Server? 我們可以利用Docker Hub搜索適合作API服務(wù)的Python快速開發(fā)框架,更具自身業(yè)務(wù)需求修改Dockerfile,訂制符合要求的鏡像,然后快速啟動一套能滿足相關(guān)API的系統(tǒng)。
容器化開發(fā)模式
- 傳統(tǒng)模式:開發(fā)團(tuán)隊在開發(fā)環(huán)境完成軟件開發(fā)測試,本地完成單元測試,測試通過,則可提交代碼到git管理倉庫。測試團(tuán)隊打包進(jìn)行測試。運維吧應(yīng)用部署到測試環(huán)境,安撫團(tuán)隊或者測試團(tuán)隊再次測試,沒問題后運維或者部署人員發(fā)布到生產(chǎn)。
- 上述過程涉及到三個環(huán)境:開發(fā),測試,生產(chǎn),以及三個團(tuán)隊:開發(fā),測試,運維。多個環(huán)境和多個團(tuán)隊之間的交互。容易出現(xiàn)彼此環(huán)境的不一致情況造成的各種問題。
- 容器模式下,應(yīng)用是以容器形式存在,所有和該應(yīng)用相關(guān)的依賴都會在容器中,因此移植方便,不存在像傳統(tǒng)模式那種環(huán)境不一致的情況
- 以下比較兩種流程圖,左邊為傳統(tǒng)開發(fā)流程,右邊容器化開發(fā)流程
操作流程
- 容器化應(yīng)用中,項目架構(gòu)師或者PM和開發(fā)人員的作用貫穿整個開發(fā),測試,生產(chǎn)三個環(huán)節(jié)。
- 首先,架構(gòu)師或PM根據(jù)項目預(yù)期創(chuàng)建好需要的基礎(chǔ)base鏡像,例如nginx,tomcat,mysql鏡像,或者將Dockerfile風(fēng)發(fā)給所有開發(fā)人員,所有開發(fā)人員根據(jù)Dockerfile創(chuàng)建的容器或者從內(nèi)部倉庫下載鏡像進(jìn)行開發(fā),達(dá)到開發(fā)環(huán)境的充分一致。若開發(fā)過程中需要添加新軟件,執(zhí)行要在base鏡像的Dockerfile添加修改即可。
- 接著開發(fā)結(jié)束后,架構(gòu)師調(diào)整Dockerfile或者Docker鏡像,然后風(fēng)發(fā)給測試部門,測試部門馬上可以進(jìn)行測試,消除部署困難等難題。
- 例如,用java開發(fā)語言,使用Tomcat, Weblogic作為中間件服務(wù)器,后臺數(shù)據(jù)庫使用Oracle,Mysql等容器開發(fā)之前開發(fā)到測試的流程如下圖,
- 容器化之后開發(fā),測試,運維工作流程如下圖:
注意事項
- 開發(fā)測試環(huán)境,推薦使用-v共享文件夾來存儲開發(fā)人員的代碼,避免頻繁打包
- 利用基礎(chǔ)base鏡像繼承特性調(diào)整鏡像的輕微變更。例如當(dāng)使用程序?qū)Σ煌姹綣DK支持,只需修改base鏡像JDK設(shè)置,之后其他依賴的鏡像重新創(chuàng)建過程中就可以自動完成更新
小結(jié)
- 以上基于公司之前使用Docker Compose實戰(zhàn)中的一些思考,持續(xù)交付注重的是效率。一直研發(fā)流程上最讓人抓狂的是研發(fā)周期的管理。無論傳統(tǒng)模式還是款速迭代,瀑布流,都需要有完善的代碼周期支持。容器化正好契合了這一需求,為產(chǎn)品研發(fā)帶來了生產(chǎn)力的提升。
上一篇:Docker之Dockerfile詳解
下一篇:SpringCloud Alibaba 框架下公司架構(gòu)圖
總結(jié)
以上是生活随笔為你收集整理的Docker容器实战思维的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。