溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

開發(fā)環(huán)境與生產(chǎn)環(huán)境中的Docker--第二篇

發(fā)布時(shí)間:2020-08-05 23:04:19 來源:網(wǎng)絡(luò) 閱讀:1769 作者:觸龍 欄目:云計(jì)算

開發(fā)環(huán)境與生產(chǎn)環(huán)境中的Docker--第二篇



對(duì)于大多數(shù)團(tuán)隊(duì)而言,采用Docker主要是為了讓開發(fā)人員更快地迭代和縮短發(fā)布周期,這對(duì)于開發(fā)環(huán)境是非常有益的,但對(duì)于生產(chǎn)環(huán)境,在同一臺(tái)服務(wù)器上運(yùn)行多個(gè)Docker容器,可能會(huì)導(dǎo)致安全方面的漏洞。事實(shí)上,幾乎所有關(guān)于在生產(chǎn)環(huán)境中運(yùn)行Docker的話題,都是圍繞著將開發(fā)環(huán)境與生產(chǎn)環(huán)境區(qū)分開來進(jìn)行的:一是編排,二是安全。


在生產(chǎn)環(huán)境中,Docker有時(shí)是用于接收公共網(wǎng)絡(luò)流量的容器,有時(shí)則是用來處理來自負(fù)荷的異步后臺(tái)作業(yè),不管哪種用途,在生產(chǎn)環(huán)境中運(yùn)行Docker與在其他環(huán)境中運(yùn)行相比,最主要的差異就是都需要在其安全性與穩(wěn)定性上投入較多的注意力。Docker生產(chǎn)環(huán)境很難管理,它簡(jiǎn)化了從開發(fā)到生產(chǎn)的工作流程,但同時(shí)增加了安全和編排的復(fù)雜度。所有在生產(chǎn)環(huán)境中運(yùn)行Docker的團(tuán)隊(duì),都會(huì)在傳統(tǒng)的安全最佳實(shí)踐上做出一項(xiàng)或多項(xiàng)妥協(xié)。如果無法完全信任容器內(nèi)運(yùn)行的代碼,那么就只得選用容器與虛擬機(jī)一對(duì)一的拓?fù)浞绞?。?duì)于很多團(tuán)隊(duì)而言,在生產(chǎn)環(huán)境中運(yùn)行Docker的優(yōu)勢(shì)遠(yuǎn)遠(yuǎn)大于其帶來的安全與編排問題。


哪些東西不要Docker化?不要期望能在Docker容器中運(yùn)行所有的東西。Herok風(fēng)格的“十二要素”應(yīng)用是最容易Docker化的,因?yàn)樗鼈儾痪S護(hù)狀態(tài)。在理想的微服務(wù)環(huán)境中,容器能在幾毫秒內(nèi)啟動(dòng)、停止而不影響集群的健康或應(yīng)用程序的狀態(tài)。Docker還不適用于任何需要?jiǎng)討B(tài)調(diào)整CPU和內(nèi)存要求的應(yīng)用。允許動(dòng)態(tài)調(diào)整的代碼已經(jīng)完成,但尚不清楚何時(shí)才能在一般的生產(chǎn)環(huán)境中投入使用。目前,若對(duì)被容器的CPU和內(nèi)存的限制進(jìn)行調(diào)整,需要停止并重新啟動(dòng)容器。另外,對(duì)網(wǎng)絡(luò)吞吐量有高要求的應(yīng)用進(jìn)行最佳優(yōu)化時(shí)不要使用Docker,因?yàn)镈ocker使用iptables來完成宿主機(jī)IP到容器IP的NAT轉(zhuǎn)換,通過禁用Docker的NAT來提升網(wǎng)絡(luò)性能是可行的,但這是一個(gè)高級(jí)使用場(chǎng)景,很少有團(tuán)隊(duì)會(huì)在生產(chǎn)環(huán)境中這么做。


Docker最好的使用方式是將應(yīng)用程序代碼預(yù)先打包成一個(gè)Docker鏡像,鏡像通常包含所有的應(yīng)用程序代碼、運(yùn)行時(shí)的依賴及系統(tǒng)的需求,而包含數(shù)據(jù)庫(kù)憑證和其他敏感信息的配置文件通常在運(yùn)行時(shí)添加,而非內(nèi)建到鏡像中。有些團(tuán)隊(duì)會(huì)在開發(fā)機(jī)上手工構(gòu)建Docker鏡像,然后推送到鏡像倉(cāng)庫(kù),之后再?gòu)膫}(cāng)庫(kù)中拉取鏡像到生產(chǎn)環(huán)境宿主機(jī)中,這是個(gè)很簡(jiǎn)單的用例,雖然行得通,但從工作流和安全角度考慮并不理想。一個(gè)更常見的生產(chǎn)環(huán)境示例是,使用持續(xù)集成/持續(xù)交付系統(tǒng)在應(yīng)用程序代碼或Dockerfile文件發(fā)生變更時(shí)自動(dòng)構(gòu)建新鏡像。


最近幾年,科技發(fā)展迅速,從物理服務(wù)器到虛擬服務(wù)器,從虛擬服務(wù)器到擁有PaaS環(huán)境的云計(jì)算,無論是否采用了全新架構(gòu),Docker鏡像都可以在當(dāng)前環(huán)境中很容易地被使用,要使用Docker,并不需要立即從單體應(yīng)用程序遷移到面向服務(wù)架構(gòu),有很多用命允許在不同層次上集成Docker,以下是Docker常用的場(chǎng)景:

    。使用以鏡像為基礎(chǔ)的部署方式取代常規(guī)代碼部署系統(tǒng);

    。安全地在同一臺(tái)服務(wù)器上運(yùn)行遺留應(yīng)用和新應(yīng)用;

    。使用一個(gè)工具鏈循序漸進(jìn)地遷移到面向服務(wù)架構(gòu);

    。管理云端或裸機(jī)上的水平擴(kuò)展和彈性;

    。確保從開發(fā)環(huán)境到預(yù)演環(huán)境再到生產(chǎn)環(huán)境的一致性;

    。簡(jiǎn)化開發(fā)人員的機(jī)器設(shè)置和一致性;


將應(yīng)用的后臺(tái)程序遷移到Docker集群中,同時(shí)保持網(wǎng)頁(yè)服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器不變是開始使用Docker常見示例。另一示例是將應(yīng)用的部分Restful Api遷移到Docker中運(yùn)行,前端使用Nginx代理在遺留服務(wù)和Docker集群之間路由通信,通過使用此類技術(shù),團(tuán)隊(duì)可以漸進(jìn)式地從單體應(yīng)用無縫地遷移到面向服務(wù)架構(gòu)。如今的應(yīng)用程序往往需要幾十個(gè)第三方庫(kù),用于加速功能開發(fā)或連接第三方SaaS和數(shù)據(jù)庫(kù)服務(wù)。每個(gè)庫(kù)都可能產(chǎn)生BUG,或是讓用戶陷入版本依賴的泥沼,再加上庫(kù)頻繁更改,要在基礎(chǔ)設(shè)施上完成工作代碼的持續(xù)部署而不引起失敗,壓力巨大。Docker可貴的鏡像思想使得技術(shù)團(tuán)隊(duì)在部署工作代碼時(shí),不論是單體架構(gòu)、面向服務(wù)或是二者的混合,由于代碼及其依賴?yán)壴谕粋€(gè)鏡像中,所使用的方式對(duì)每次部署都是可測(cè)試、可重復(fù)、文檔化且一致的,一旦一個(gè)鏡像構(gòu)建完畢,就可以部署到任意多個(gè)運(yùn)行著的Docker守護(hù)進(jìn)程的服務(wù)器上。另外一個(gè)常見的Docker用例是跨環(huán)境部署一個(gè)單一容器,其典型的代碼路徑是從開發(fā)環(huán)境到預(yù)演環(huán)境再到生產(chǎn)環(huán)境,容器為整個(gè)代碼路徑提供了一個(gè)一致的、可測(cè)試的環(huán)境。作為一個(gè)開發(fā)人員,Docker模型允許在其個(gè)人電腦上調(diào)試與生產(chǎn)環(huán)境完全一致的代碼,開發(fā)人員可以很容易地下載、運(yùn)行和調(diào)試有問題的生產(chǎn)環(huán)境鏡像,且無需事先對(duì)本地開發(fā)環(huán)境進(jìn)行修改。




向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI