天天看點

容器技術反例:哪些不适合利用Docker實作?

51cto.com快譯】 此篇文章,将為大家詳細介紹那些不适合利用docker實作的技術。

容器技術反例:哪些不适合利用Docker實作?

一)容器中的資料或者日志

容器适合處理無狀态且僅需要短期運作的應用。這意味着我們不應将資料或者日志存儲在容器内——否則其會在容器終止時一并消失。相反,利用分卷映射将其持久存儲于容器之外。elk堆棧可用于存儲及處理日志。如果所管理分卷曾在測試流程中使用,那麼請在dockerrm指令中添加-v将其移除。

二)容器ip位址

每套容器都擁有自己的ip位址。多套容器彼此通信以建立同一應用,例如部署在應用伺服器上的應用即需要與資料庫對話。在運作過程中,會不斷有舊容器關閉,新容器開啟。依靠容器ip位址意味着我們需要不斷更新應用配置方能保持這種通信能力。相反,我們應當為其建立專門的服務,用于容納動态變化的容器引用邏輯名稱,并借此實作基本的負載均衡功能。

三)容器中運作單一程序

每個dockerfile都會使用一個cmd與entrypoint。通常來講,cmd會利用腳本以執行部分鏡像配置,而後啟動該容器。不要嘗試在該腳本中使用多個程序。大家應當在建立docker鏡像時遵循分離原則的方針,否則會令容器在管理、日志收集以及更新方面遭遇更多難題。大家可以考慮将應用拆分成多套容器,并對其進行逐一管理。

四)不要使用docker exec

docker exec指令會在運作中的容器内開始一條新指令。其适用于利用docker exec -it {cid} bash實作shell附加。然而除此之外,容器本身應該已經運作有該程序。

五)保持鏡像精簡

建立一個新目錄,并将dockerfile及其它相關檔案儲存在其中。另外,考慮使用.dockeringore以移除任何日志、源代碼等,而後再進行鏡像建立。確定移除一切已經被解壓的下載下傳軟體包。

六)利用運作中的容器建立鏡像

應使用docker commit指令建立新鏡像。這種方式适用于容器已經發生改變的情況。不過由此建立的鏡像不可重制。相反,我們應在dockerfile中進行修改,終止現有容器,并利用更新後的鏡像啟動新容器。

七)docker鏡像中的安全憑證

不要将安全憑證存儲在dockerfile當中。其将以明文形式存在并被檢入存儲庫内,這将引發潛在的安全威脅。使用-e将密碼指定為環境變更。而後,可利用--env-file讀取檔案中的環境變量。另一種方案是利用cmd或者entrypoint指定一套腳本。該腳本負責将憑證由第三方處提取出來并用于配置應用。

八)latest标簽

很多朋友可能習慣利用couchbase啟動鏡像。如果未指定标簽,那麼容器會預設使用couchbase:latest鏡像。此鏡像可能并非最新,而是引用某個陳舊版本。需要強調的是,将應用引入生産流程要求配合一套采用特定鏡像版本的完全受控環境。確定始終使用正确的标簽以運作容器——例如使用couchbase:enterprise-4.5.1而非couchbase。

九)鏡像不比對

不要在開發、測試、分段以及生産環境内使用不同的圖像或者标簽。作為“標明來源”的鏡像應僅建立一次,并被推送至存儲庫内。該鏡像應被用于各類不同環境。在某些情況下,大家可以考慮在war檔案上運作單元測試,而後再建立鏡像。不過請注意,任何系統內建測試都應當在生産環境實際使用的鏡像中完成。

十)釋出端口

不要利用-p以釋出全部公開端口,因為如此一來大家将能夠運作多套容器并釋出其公開端口。這樣做亦意味着全部端口都将公開釋出。相反,請使用-p以釋出特定端口。

 作者:核子可樂譯

來源:51cto