摘要:鑒于這一特征,用戶必須轉(zhuǎn)變他們使用以及管理容器時的心態(tài)。不要將應(yīng)用分開發(fā)布有些人會將容器視為虛擬機,他們中的大部分人認為,應(yīng)該在現(xiàn)有的運行容器中部署應(yīng)用。不要以用戶運行進程默認情況下,容器以權(quán)限運行。
【編者按】本文作者為 Rafael Benevides,主要介紹使用 Docker 容器時應(yīng)該注意的十個陷阱。文章系國內(nèi) ITOM 管理平臺 OneAPM 編譯呈現(xiàn),以下為正文。
當你剛開始使用容器時,會發(fā)現(xiàn)容器能解決許多問題,而且好處很多:
首先:容器是不可變的 —— 操作系統(tǒng)、庫版本、配置、文件夾以及應(yīng)用全都包裹在容器內(nèi)。你可以確保,在 QA 階段測試的一張圖片,肯定會在生產(chǎn)環(huán)境中出現(xiàn),并且行為保持一致。
其次:容器是輕量級的 —— 容器的內(nèi)存占用很小。容器只會給主進程分配內(nèi)存,因此無需十幾萬個 MB 的內(nèi)存空間。
最后:容器速度很快 —— 啟動容器就跟啟動典型的 linux 進程一樣快。無需好幾分鐘,一個新的容器可以在幾秒內(nèi)啟動完畢。
然而,許多用戶仍然只是將容器視為典型的虛擬機。他們忘記了容器的一個重要特征:容器是可丟棄的。
圍繞容器的咒語:“容器是臨時的”。
鑒于這一特征,用戶必須轉(zhuǎn)變他們使用以及管理容器時的心態(tài)。下面,筆者將介紹為了充分利用 Docker 容器的好處,用戶應(yīng)該避免的十個陷阱:
1)不要在容器內(nèi)存儲數(shù)據(jù) —— 容器可以被停止、銷毀或者取代。運行在容器中的應(yīng)用1.0版本應(yīng)該能夠輕易地被1.1版本所取代,且不產(chǎn)生任何影響或數(shù)據(jù)丟失。因此,如果你需要存儲數(shù)據(jù),請將其存儲在卷組(volume)中。在這種情況下,你要格外小心兩個容器向同一卷組寫入數(shù)據(jù)的情況,因為這很容易導致數(shù)據(jù)污染。總之,要確保自己的應(yīng)用向共享的數(shù)據(jù)存儲區(qū)填寫數(shù)據(jù)。
2)不要將應(yīng)用分開發(fā)布 —— 有些人會將容器視為虛擬機,他們中的大部分人認為,應(yīng)該在現(xiàn)有的運行容器中部署應(yīng)用。在開發(fā)階段,因為需要不斷地修改配置并調(diào)試應(yīng)用,這樣做無可厚非。但是,當持續(xù)交付管道行進至 QA 與生產(chǎn)階段時,不應(yīng)該把鏡像和應(yīng)用分開。記住:容器是不可變的。
3)不要創(chuàng)建太大的鏡像 —— 鏡像越大,越難以分發(fā)。確保只留有運行應(yīng)用或進程所需的文件和庫。不要安裝不必要的包或運行“update”(yum update)指令下載太多文件到新的鏡像層。
更新:關(guān)于這條建議,有一篇解釋更為詳盡的文章:《保持小巧:細究 Docker 鏡像大小》
4)不要使用單層鏡像 —— 為了有效利用分層的文件系統(tǒng),總是為操作系統(tǒng)創(chuàng)建基礎(chǔ)鏡像層,此外,分別為用戶名定義、運行時安裝、配置、以及自己的應(yīng)用創(chuàng)建不同的鏡像層。這樣一來,重現(xiàn)、管理以及傳送鏡像會變得更為簡單。
5)不用為運行中的容器創(chuàng)建鏡像 —— 換句話說,不要使用 “docker commit” 指令創(chuàng)建鏡像。這種創(chuàng)建鏡像的方法是不可重現(xiàn)的,應(yīng)該完全避免。相反,總是使用 Dockerfile 或任何 S2I (source-to-image,源碼到鏡像) —— 完全可重現(xiàn)的方法來創(chuàng)建鏡像。這樣一來,如果你將 Dockerfile 保存在源碼存儲控制庫(git)內(nèi),就可以追蹤其后續(xù)變化。
6)不要多帶帶使用“l(fā)atest(最新)”標簽 —— 最新標簽就像 Maven 用戶眼中的 “SNAPSHOT(快照)”。因為容器本身的分層式文件系統(tǒng),我們鼓勵使用標簽。但是,你可不想在幾個月后正打算創(chuàng)建鏡像時,卻驚訝地發(fā)現(xiàn)應(yīng)用無法運行,而原因居然是一個父層(Dockerfile 中的 FROM)已經(jīng)被無法向后兼容的新版取代,或是創(chuàng)建緩存中檢索出的“最新”版本是錯的。此外,由于你無法追蹤當前運行鏡像的版本,“最新”標簽也不應(yīng)該在生產(chǎn)環(huán)境中部署容器時使用。
7)不要在一個容器內(nèi)運行多個進程 —— 容器在運行單一進程(http 后臺進程、應(yīng)用服務(wù)器、數(shù)據(jù)庫)時幾乎無可挑剔,但是,如果運行多個進程,你可能會在管理、檢索日志以及獨個更新進程時遇到麻煩。
8)不要在鏡像中存儲憑證 —— 使用環(huán)境變量。不要將鏡像中的任何用戶名或密碼寫死。使用環(huán)境變量從容器外部檢索這些信息。Postgress 鏡像就是踐行該準則的好榜樣。
9)不要以 root 用戶運行進程 —— “默認情況下,docker 容器以 root 權(quán)限運行。(…)隨著 Docker 的不斷完善,更多安全的默認選項會逐漸出現(xiàn)。就當下而言,要求 root 權(quán)限對有些用戶而言比較危險,可能無法在所有環(huán)境中實現(xiàn)。你的鏡像應(yīng)該使用 USER 指令為容器確定一個非 root 運行權(quán)限。”(摘自《Docker 鏡像作者指南》)
10)不要依賴 IP 地址 —— 每個容器都有其內(nèi)部 IP 地址,該地址可能因為啟動或停止容器而發(fā)生改變。如果你的應(yīng)用或微服務(wù)需要與另一個容器交換消息,應(yīng)該使用環(huán)境變量在容器間傳送合適的主機名與端口號。
OneAPM Cloud Insight 產(chǎn)品集監(jiān)控、管理、計算、協(xié)作、可視化于一身,幫助所有 IT 公司,減少在系統(tǒng)監(jiān)控上的人力和時間成本投入,讓運維工作更加高效、簡單。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方技術(shù)博客。
本文轉(zhuǎn)自 OneAPM 官方博客
原文地址:http://developerblog.redhat.com/2016/02/24/10-things-to-avoid-in-docker-containers/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26584.html
摘要:前端日報精選漸進式動畫解決方案從前端開發(fā)看面向未來的敏捷學習法知乎專欄深度剖析現(xiàn)代應(yīng)用眾成翻譯譯關(guān)于你需要知道的一切構(gòu)建離線優(yōu)先的應(yīng)用知乎專欄中文為何默認開啟四進程不犧牲內(nèi)存占用異步一淺出異步事件性能調(diào)優(yōu)之內(nèi)存篇二知乎專欄之性能 2017-06-16 前端日報 精選 漸進式動畫解決方案從前端開發(fā)看面向未來的敏捷學習法 - 知乎專欄深度剖析現(xiàn)代 JavaScript 應(yīng)用 — SiteP...
摘要:,,當前使用的容器名為,為。守護式容器沒有交互式會話,適合運行應(yīng)用程序和服務(wù)。大多數(shù)時候是需要以守護式來運行容器。與之前創(chuàng)建的容器相比,沒有返回會話,只是返回了一個容器。刪除容器運行中的容器無法刪除,必須先停止。 windows 7, docker 1.3.2,當前使用的容器名為aoct,ID為614122c0aabb。 開啟已經(jīng)停止的容器 可以start + 容器名 $ sud...
摘要:將一個輕量級的容器虛擬化平臺和一組標準工作流程工具進行集成,來幫助你方便地管理和部署應(yīng)用。主要包括哪些組件主要包括兩個組件開源的容器虛擬化平臺用于分享和管理容器的軟件即服務(wù)平臺。 【編者的話】本文來自 Docker 的官方文檔,詳細介紹了 Docker 的體系結(jié)構(gòu)、重要概念、內(nèi)部工作機理等內(nèi)容,推薦不了解 Docker 內(nèi)部原理的同學閱讀。 什么是 Docker? Docker 是...
閱讀 3528·2021-09-22 15:50
閱讀 3233·2019-08-30 15:54
閱讀 2748·2019-08-30 14:12
閱讀 3058·2019-08-30 11:22
閱讀 2079·2019-08-29 11:16
閱讀 3574·2019-08-26 13:43
閱讀 1192·2019-08-23 18:33
閱讀 920·2019-08-23 18:32