成都創(chuàng)新互聯(lián)是一家以網(wǎng)絡技術(shù)公司,為中小企業(yè)提供網(wǎng)站維護、成都網(wǎng)站設計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設、網(wǎng)站備案、服務器租用、域名注冊、軟件開發(fā)、微信小程序定制開發(fā)等企業(yè)互聯(lián)網(wǎng)相關(guān)業(yè)務,是一家有著豐富的互聯(lián)網(wǎng)運營推廣經(jīng)驗的科技公司,有著多年的網(wǎng)站建站經(jīng)驗,致力于幫助中小企業(yè)在互聯(lián)網(wǎng)讓打出自已的品牌和口碑,讓企業(yè)在互聯(lián)網(wǎng)上打開一個面向全國乃至全球的業(yè)務窗口:建站歡迎來電:18982081108
對于大多數(shù)團隊而言,采用Docker主要是為了讓開發(fā)人員更快地迭代和縮短發(fā)布周期,這對于開發(fā)環(huán)境是非常有益的,但對于生產(chǎn)環(huán)境,在同一臺服務器上運行多個Docker容器,可能會導致安全方面的漏洞。事實上,幾乎所有關(guān)于在生產(chǎn)環(huán)境中運行Docker的話題,都是圍繞著將開發(fā)環(huán)境與生產(chǎn)環(huán)境區(qū)分開來進行的:一是編排,二是安全。
在生產(chǎn)環(huán)境中,Docker有時是用于接收公共網(wǎng)絡流量的容器,有時則是用來處理來自負荷的異步后臺作業(yè),不管哪種用途,在生產(chǎn)環(huán)境中運行Docker與在其他環(huán)境中運行相比,最主要的差異就是都需要在其安全性與穩(wěn)定性上投入較多的注意力。Docker生產(chǎn)環(huán)境很難管理,它簡化了從開發(fā)到生產(chǎn)的工作流程,但同時增加了安全和編排的復雜度。所有在生產(chǎn)環(huán)境中運行Docker的團隊,都會在傳統(tǒng)的安全最佳實踐上做出一項或多項妥協(xié)。如果無法完全信任容器內(nèi)運行的代碼,那么就只得選用容器與虛擬機一對一的拓撲方式。對于很多團隊而言,在生產(chǎn)環(huán)境中運行Docker的優(yōu)勢遠遠大于其帶來的安全與編排問題。
哪些東西不要Docker化?不要期望能在Docker容器中運行所有的東西。Herok風格的“十二要素”應用是最容易Docker化的,因為它們不維護狀態(tài)。在理想的微服務環(huán)境中,容器能在幾毫秒內(nèi)啟動、停止而不影響集群的健康或應用程序的狀態(tài)。Docker還不適用于任何需要動態(tài)調(diào)整CPU和內(nèi)存要求的應用。允許動態(tài)調(diào)整的代碼已經(jīng)完成,但尚不清楚何時才能在一般的生產(chǎn)環(huán)境中投入使用。目前,若對被容器的CPU和內(nèi)存的限制進行調(diào)整,需要停止并重新啟動容器。另外,對網(wǎng)絡吞吐量有高要求的應用進行最佳優(yōu)化時不要使用Docker,因為Docker使用iptables來完成宿主機IP到容器IP的NAT轉(zhuǎn)換,通過禁用Docker的NAT來提升網(wǎng)絡性能是可行的,但這是一個高級使用場景,很少有團隊會在生產(chǎn)環(huán)境中這么做。
Docker最好的使用方式是將應用程序代碼預先打包成一個Docker鏡像,鏡像通常包含所有的應用程序代碼、運行時的依賴及系統(tǒng)的需求,而包含數(shù)據(jù)庫憑證和其他敏感信息的配置文件通常在運行時添加,而非內(nèi)建到鏡像中。有些團隊會在開發(fā)機上手工構(gòu)建Docker鏡像,然后推送到鏡像倉庫,之后再從倉庫中拉取鏡像到生產(chǎn)環(huán)境宿主機中,這是個很簡單的用例,雖然行得通,但從工作流和安全角度考慮并不理想。一個更常見的生產(chǎn)環(huán)境示例是,使用持續(xù)集成/持續(xù)交付系統(tǒng)在應用程序代碼或Dockerfile文件發(fā)生變更時自動構(gòu)建新鏡像。
最近幾年,科技發(fā)展迅速,從物理服務器到虛擬服務器,從虛擬服務器到擁有PaaS環(huán)境的云計算,無論是否采用了全新架構(gòu),Docker鏡像都可以在當前環(huán)境中很容易地被使用,要使用Docker,并不需要立即從單體應用程序遷移到面向服務架構(gòu),有很多用命允許在不同層次上集成Docker,以下是Docker常用的場景:
。使用以鏡像為基礎的部署方式取代常規(guī)代碼部署系統(tǒng);
。安全地在同一臺服務器上運行遺留應用和新應用;
。使用一個工具鏈循序漸進地遷移到面向服務架構(gòu);
。管理云端或裸機上的水平擴展和彈性;
。確保從開發(fā)環(huán)境到預演環(huán)境再到生產(chǎn)環(huán)境的一致性;
。簡化開發(fā)人員的機器設置和一致性;
將應用的后臺程序遷移到Docker集群中,同時保持網(wǎng)頁服務器和數(shù)據(jù)庫服務器不變是開始使用Docker常見示例。另一示例是將應用的部分Restful Api遷移到Docker中運行,前端使用Nginx代理在遺留服務和Docker集群之間路由通信,通過使用此類技術(shù),團隊可以漸進式地從單體應用無縫地遷移到面向服務架構(gòu)。如今的應用程序往往需要幾十個第三方庫,用于加速功能開發(fā)或連接第三方SaaS和數(shù)據(jù)庫服務。每個庫都可能產(chǎn)生BUG,或是讓用戶陷入版本依賴的泥沼,再加上庫頻繁更改,要在基礎設施上完成工作代碼的持續(xù)部署而不引起失敗,壓力巨大。Docker可貴的鏡像思想使得技術(shù)團隊在部署工作代碼時,不論是單體架構(gòu)、面向服務或是二者的混合,由于代碼及其依賴捆綁在同一個鏡像中,所使用的方式對每次部署都是可測試、可重復、文檔化且一致的,一旦一個鏡像構(gòu)建完畢,就可以部署到任意多個運行著的Docker守護進程的服務器上。另外一個常見的Docker用例是跨環(huán)境部署一個單一容器,其典型的代碼路徑是從開發(fā)環(huán)境到預演環(huán)境再到生產(chǎn)環(huán)境,容器為整個代碼路徑提供了一個一致的、可測試的環(huán)境。作為一個開發(fā)人員,Docker模型允許在其個人電腦上調(diào)試與生產(chǎn)環(huán)境完全一致的代碼,開發(fā)人員可以很容易地下載、運行和調(diào)試有問題的生產(chǎn)環(huán)境鏡像,且無需事先對本地開發(fā)環(huán)境進行修改。
標題名稱:開發(fā)環(huán)境與生產(chǎn)環(huán)境中的Docker--第二篇
分享鏈接:http://chinadenli.net/article4/ihjioe.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站導航、微信公眾號、定制開發(fā)、App開發(fā)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)