Docker有什么好处?
Docker背后的想法是創(chuàng)建軟件程序可移植的輕量容器,讓其可以在任何安裝了Docker的機器上運行,而不用關(guān)心底層操作系統(tǒng),類似船舶使用的集裝箱,野心勃勃的他們成功了。
Docker可以解決虛擬機能夠解決的問題,同時也能夠解決虛擬機由于資源要求過高而無法解決的問題。Docker能處理的事情包括:
- 隔離應(yīng)用依賴
- 創(chuàng)建應(yīng)用鏡像并進行復(fù)制
- 創(chuàng)建容易分發(fā)的即啟即用的應(yīng)用
- 允許實例簡單、快速地擴展
- 測試應(yīng)用并隨后銷毀它們
標準化應(yīng)用發(fā)布,docker容器包含了運行環(huán)境和可執(zhí)行程序,可以跨平臺和主機使用;
節(jié)約時間,快速部署和啟動,VM啟動一般是分鐘級,docker容器啟動是秒級;
方便構(gòu)建基于SOA架構(gòu)或微服務(wù)架構(gòu)的系統(tǒng),通過服務(wù)編排,更好的松耦合;
節(jié)約成本,以前一個虛擬機至少需要幾個G的磁盤空間,docker容器可以減少到MB級;
方便持續(xù)集成,通過與代碼進行關(guān)聯(lián)使持續(xù)集成非常方便;
可以作為集群系統(tǒng)的輕量主機或節(jié)點,在IaaS平臺上,已經(jīng)出現(xiàn)了CaaS,通過容器替代原來的主機。
目前大型互聯(lián)網(wǎng)公司有騰訊、京東、美團、新浪、大眾點評等都在使用。比如說騰訊的蓋亞,基于docker部署管理,據(jù)說已經(jīng)有萬臺規(guī)模,用于大數(shù)據(jù)處理。美團主要是用于持續(xù)集成,自動構(gòu)建方面,另外新浪也做了實踐。容器化是一個大趨勢,以后這方面的公司會越來越多。
Docker提供功能廣泛,這里有幾個的例子:
-
Images(鏡像):Docker可以通過Pull和Push命令構(gòu)建對象到服務(wù)中心
-
Containers(容器):Docker可以通過Start/Stop命令管理容器的生命周期
-
Logging(日志):Docker可以通過stdout,stderro捕獲輸出所有的容器內(nèi)部信息
-
Volumes(存儲):Docker可以創(chuàng)建和管理容器的相關(guān)文件存儲
-
Networking(網(wǎng)絡(luò)):Docker可以創(chuàng)建管理虛擬的接口和內(nèi)部所有容器之間的網(wǎng)絡(luò)橋接
-
RPC:Docker服務(wù)器提供允許外部程序去控制所有容器的行為的API
鏡像管理
鏡像是Docker管理最基礎(chǔ)的部分,同時也是Docker最大的亮點。鏡像管理涉及到鏡像的制作、更新、存儲、分發(fā)、權(quán)限等多個方面。
鏡像制作方面,應(yīng)該堅持三個原則,第一是堅持鏡像總是從Dockerfile生成。這樣做最大的好處是可以通過Dockerfile“閱讀”鏡像,在后續(xù)的協(xié)作、升級維護等方面會帶來巨大的便利。第二是鏡像之間應(yīng)該避免依賴過深,建議為三層,這三層分別是基礎(chǔ)的操作系統(tǒng)鏡像、中間件鏡像和應(yīng)用鏡像。第三是堅持所有鏡像都應(yīng)該有對應(yīng)的Git倉庫,以方便后續(xù)的更新。
鏡像的更新需要一個自動化的流程,這可以通過SCM和CI系統(tǒng)自動觸發(fā)實現(xiàn)。具體的流程如下圖所示。開發(fā)者首先將代碼和Dockerfile提交到Git倉庫,然后Git通過webhook方式觸發(fā)Jenkins的主動獲取代碼和Dockerfile文件,Jenkins再通過Docker相關(guān)的插件生成鏡像并推送鏡像到私有的Registry。這樣,在服務(wù)器上就可以通過拉取新的鏡像部署容器。
關(guān)于Registry,可能會涉及三方面的問題,一個是單點問題,對應(yīng)的解決方案可以考慮DRBD、分布式存儲以及云存儲。二是Regitry的性能問題,目前可用的解決方案是通過HTTP反向代理緩存來加速Layer的下載。三是Registry用戶權(quán)限,Nginx LUA可以提供一個簡單快速的實現(xiàn)方案。
發(fā)布管理
和傳統(tǒng)的發(fā)布流程相比,Docker最大的好處是不需要考慮外部依賴,利用容器的自包含的特點,我們可以將發(fā)布回滾流程標準化和產(chǎn)品化。而傳統(tǒng)的發(fā)布和回滾,需要casebycase去針對不同應(yīng)用做升級回滾的方案。要做到基于Docker的發(fā)布,鏡像的生成必須堅持自動化,否則會發(fā)現(xiàn)升級比傳統(tǒng)的方法更麻煩。因此在現(xiàn)實中我們也發(fā)現(xiàn)很多企業(yè)將代碼目錄放到主機目錄映射到容器內(nèi),這樣做破壞了Docker的自包含特性,解決的辦法是堅持應(yīng)用鏡像更新自動化。
發(fā)布管理
和傳統(tǒng)的發(fā)布流程相比,Docker最大的好處是不需要考慮外部依賴,利用容器的自包含的特點,我們可以將發(fā)布回滾流程標準化和產(chǎn)品化。而傳統(tǒng)的發(fā)布和回滾,需要casebycase去針對不同應(yīng)用做升級回滾的方案。要做到基于Docker的發(fā)布,鏡像的生成必須堅持自動化,否則會發(fā)現(xiàn)升級比傳統(tǒng)的方法更麻煩。因此在現(xiàn)實中我們也發(fā)現(xiàn)很多企業(yè)將代碼目錄放到主機目錄映射到容器內(nèi),這樣做破壞了Docker的自包含特性,解決的辦法是堅持應(yīng)用鏡像更新自動化。
日志管理
由于容器是無狀態(tài)的,所以存儲在容器內(nèi)的日志會隨著容器的銷毀而消失。stdout/stderr類型的日志,可通過logspout轉(zhuǎn)發(fā)到syslog中心來收集。打印到文件的支持,比如accesslog,需要將日志存儲到外部的Volume,并在Docker主機上使用logstash收集轉(zhuǎn)發(fā)。
配置管理
容器里沒有CM agent,無法接收CM指令。CM運行到Host上也無法管理容器中的文件,如果手工修改容器內(nèi)的配置,那新創(chuàng)建的容器仍然是舊的。配置大體上分為兩種類型,一種是服務(wù)之間的連接信息,這種配置建議考慮使用服務(wù)發(fā)現(xiàn)系統(tǒng),也可以使用一些更加傳統(tǒng)的方法,比如通過環(huán)境變量來協(xié)調(diào)作開發(fā)和生產(chǎn)環(huán)境的配置差異。一種是一般的配置文件參數(shù),配置文件和Dockerfile應(yīng)該一起存儲到一個Git倉庫,修改后自動build更新鏡像。
網(wǎng)絡(luò)管理
目前Docker支持的網(wǎng)絡(luò)包括Host網(wǎng)絡(luò)、NAT網(wǎng)絡(luò)、物理網(wǎng)橋和網(wǎng)絡(luò)虛擬化。Host網(wǎng)絡(luò)中容器和主機共享網(wǎng)絡(luò)命名空間,不同容器需要做好端口規(guī)劃,防止端口沖突。Nat網(wǎng)絡(luò)是基于四層代理以及NAT技術(shù),依賴portmap,進出都需要轉(zhuǎn)發(fā),性能低,主機上需要做好端口規(guī)劃,容易搞混。物理網(wǎng)橋方案,和傳統(tǒng)虛擬機的網(wǎng)橋沒有區(qū)別,適合容器數(shù)量有限且相對靜止的場景。網(wǎng)絡(luò)虛擬化是基于隧道的overlay網(wǎng)絡(luò),目前開源方案有SocketPlane、Weave、Flannel,適合數(shù)量大,動態(tài)創(chuàng)建銷毀容器的場景。
轉(zhuǎn)載于:https://www.cnblogs.com/lys_013/p/5682153.html
總結(jié)
以上是生活随笔為你收集整理的Docker有什么好处?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery实现截取pc图片_如何优雅的
- 下一篇: 拦截器 过滤器 监听器 的区别