[转] 使用Docker容器,这些错误千万别犯
【From】http://www.maiziedu.com/article/23592/
?
之前我寫了一篇文章(作為ruby程序猿, 為什么非得用Docker?),里面詳細(xì)講了他的優(yōu)點(diǎn),相信大家都有所了解,但是即使它有這么多優(yōu)點(diǎn),我們也必須避免在容器中做以下的事,以確保容器最大限度的發(fā)揮作用。
?
? ? ? ?1.不要在容器中存儲(chǔ)數(shù)據(jù)?
? ? ? ?容器可能被停止,銷毀,或替換。一個(gè)運(yùn)行在容器中的程序版本1.0,應(yīng)該很容易被1.1的版本替換且不影響或損失數(shù)據(jù)。有鑒于此,如果你需要存儲(chǔ)數(shù)據(jù),請(qǐng)存在卷中,并且注意如果兩個(gè)容器在同一個(gè)卷上寫數(shù)據(jù)會(huì)導(dǎo)致崩潰。確保你的應(yīng)用被設(shè)計(jì)成在共享數(shù)據(jù)存儲(chǔ)上寫入。
?
2.不要將你的應(yīng)用發(fā)布兩份?
? ? ? ?一些人將容器視為虛擬機(jī)。他們中的大多數(shù)傾向于認(rèn)為他們應(yīng)該在現(xiàn)有的運(yùn)行容器里發(fā)布自己的應(yīng)用。在開發(fā)階段這樣是對(duì)的,此時(shí)你需要不斷地部署與調(diào)試;但對(duì)于質(zhì)量保證與生產(chǎn)中的一個(gè)連續(xù)部署的管道,你的應(yīng)用本該成為鏡像的一部分。記住:容器應(yīng)該保持不變。?
?
3.?不要?jiǎng)?chuàng)建超大鏡像?
? ? ? ?一個(gè)超大鏡像只會(huì)難以分發(fā)。確保你僅有運(yùn)行你應(yīng)用/進(jìn)程的必需的文件和庫。不要安裝不必要的包或在創(chuàng)建中運(yùn)行更新(yum更新)。
?
?4.不要使用單層鏡像?
? ? ? ?要對(duì)分層文件系統(tǒng)有更合理的使用,始終為你的操作系統(tǒng)創(chuàng)建你自己的基礎(chǔ)鏡像層,另外一層為安全和用戶定義,一層為庫的安裝,一層為配置,最后一層為應(yīng)用。這將易于重建和管理一個(gè)鏡像,也易于分發(fā)。
?
5.?不要為運(yùn)行中的容器創(chuàng)建鏡像?
? ? ? ?換言之,不要使用“docker commit”命令來創(chuàng)建鏡像。這種創(chuàng)建鏡像的方法是不可重現(xiàn)的也不能版本化,應(yīng)該徹底避免。始終使用Dockerfile或任何其他的可完全重現(xiàn)的S2I(源至鏡像)方法。??
?
?6.不要只使用“最新”標(biāo)簽?
? ? ? ? 最新標(biāo)簽就像Maven用戶的“快照”。標(biāo)簽是被鼓勵(lì)使用的,尤其是當(dāng)你有一個(gè)分層的文件系統(tǒng)。你總不希望當(dāng)你2個(gè)月之后創(chuàng)建鏡像時(shí),驚訝地發(fā)現(xiàn)你的應(yīng)用無法運(yùn)行,因?yàn)樽铐數(shù)姆謱颖环窍蚝蠹嫒莸男掳姹咎鎿Q,或者創(chuàng)建緩存中有一個(gè)錯(cuò)誤的“最新”版本。在生產(chǎn)中部署容器時(shí)應(yīng)避免使用最新。
?
?7.不要在單一容器中運(yùn)行超過一個(gè)進(jìn)程?
? ? ? ?容器能完美地運(yùn)行單個(gè)進(jìn)程(http守護(hù)進(jìn)程,應(yīng)用服務(wù)器,數(shù)據(jù)庫),但是如果你不止有一個(gè)進(jìn)程,管理、獲取日志、獨(dú)立更新都會(huì)遇到麻煩。?
?
?8.不要在鏡像中存儲(chǔ)憑據(jù)。使用環(huán)境變量
? ? ? ?不要將鏡像中的任何用戶名/密碼寫死。使用環(huán)境變量來從容器外部獲取此信息。有一個(gè)不錯(cuò)的例子是postgres鏡像。
?
?9.使用非root用戶運(yùn)行進(jìn)程
? ? ? “docker容器默認(rèn)以root運(yùn)行。(…)隨著docker的成熟,更多的安全默認(rèn)選項(xiàng)變得可用。現(xiàn)如今,請(qǐng)求root對(duì)于其他人是危險(xiǎn)的,可能無法在所有環(huán)境中可用。你的鏡像應(yīng)該使用USER指令來指令容器的一個(gè)非root用戶來運(yùn)行。”(來自 Docker鏡像作者指南)
?
10.?不要依賴IP地址
? ? ? ?每個(gè)容器都有自己的內(nèi)部IP地址,如果你啟動(dòng)并停止它地址可能會(huì)變化。如果你的應(yīng)用或微服務(wù)需要與其他容器通訊,使用任何命名與(或者)環(huán)境變量來從一個(gè)容器傳遞合適信息到另一個(gè)。
轉(zhuǎn)載于:https://www.cnblogs.com/pekkle/p/8620769.html
總結(jié)
以上是生活随笔為你收集整理的[转] 使用Docker容器,这些错误千万别犯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql serve 数据库游标的使用
- 下一篇: java容器类4:Queue深入解读