容器化祈匙,是指使用容器技術(shù)(Docker/containerd等)運(yùn)行應(yīng)用程序(容器),并使用容器編排技術(shù)(例如 K8s)來管理這些容器唬血。
我在之前的文章 《使用 Dockerfile 構(gòu)建生產(chǎn)環(huán)境鏡像》 提及普通的虛擬機(jī)部署存在的問題:
為什么有這篇文章焰坪,是因?yàn)槲以谡嬲鋈萜骰脑斓臅r(shí)候,發(fā)現(xiàn)公司生產(chǎn)環(huán)境存在大量的坑:
- 傳統(tǒng)虛擬機(jī)部署僧诚,基本依賴克隆或者手工編譯。由于人力原因蝗碎,SRE 歷來單傳湖笨,編譯出來的 PHP、擴(kuò)展等二進(jìn)制版本不一致衍菱;
- 項(xiàng)目開發(fā)人員痛苦不堪——他沒辦法模擬出接近于線上一致的環(huán)境(碰不到摸不著,各種擴(kuò)展版本都要自己去編譯)肩豁;
- 新人入職都會靈魂拷問你一句——我怎么把線上的代碼跑起來脊串?
- ……
另外辫呻,傳統(tǒng)的虛擬機(jī)部署,還存在成本浪費(fèi)——虛擬機(jī)無法做到容器的資源隔離和擴(kuò)縮容琼锋,資源利用率不高放闺。
所以我們可以發(fā)現(xiàn),有以下幾點(diǎn)好處:
一缕坎、環(huán)境的高度一致性
- 容器需要制作鏡像文件怖侦,描述環(huán)境的構(gòu)建過程,也就意味著它可以保證環(huán)境的高度一致
- 無論本地環(huán)境或者生產(chǎn)環(huán)境谜叹,由于 Dockerfile 的存在匾寝,不同的操作系統(tǒng)也可以兼容
- 高度一致性帶來了環(huán)境的統(tǒng)一,統(tǒng)一的環(huán)境有利于 CI/CD 流程荷腊,結(jié)合自動化技術(shù)提升效率
二艳悔、資源隔離
- 以往虛擬機(jī)容易因?yàn)榛旌喜渴穑承?yīng)用耗費(fèi)內(nèi)存過大女仰,導(dǎo)致程序 OOM 崩潰猜年,而容器由于資源隔離,不會互相影響
- 合理分配每個(gè)容器的資源疾忍,有利于提高資源利用率乔外,降低資源成本
- 通過 Linux Cgroups 技術(shù)(Linux Control Group)限制資源上限;通過 Linux NameSpace 機(jī)制修改進(jìn)程看到的外部資源的 “視圖”
三一罩、輕量級
- 相比虛擬機(jī)杨幼,容器啟動速度在秒級別
- 容器為進(jìn)程,通過 Linux NameSpace 機(jī)制和 unionFS擒抛,使得進(jìn)程本身看起來好像擁有一個(gè)隔離的環(huán)境和文件系統(tǒng)(實(shí)際上還是宿主機(jī)的一個(gè)進(jìn)程)
容器化是未來的一大趨勢推汽!讓我們擁抱云原生吧!
文章來源于本人博客歧沪,發(fā)布于 2022-11-05歹撒,原文鏈接:https://imlht.com/archives/407/