一、什么是容器嚼酝?
容器這個詞浮还,當(dāng)你第一眼看它或許腦子里是這東西:瓶瓶罐罐、裝水闽巩、裝其他東西的玩意钧舌。
不管是什么,總的來說涎跨,容器給人第一印象就是——“裝”洼冻。
那今天我們要說的容器技術(shù)是怎么一個概念呢?其實(shí)隅很,IT里的容器技術(shù)是英文單詞Linux Container的直譯撞牢。container這個單詞有集裝箱、容器的含義(主要偏集裝箱意思)叔营。不過屋彪,在中文環(huán)境下,咱們要交流要傳授绒尊,如果翻譯成“集裝箱技術(shù)” 就有點(diǎn)拗口畜挥,所以結(jié)合中國人的吐字習(xí)慣和文化背景,更喜歡用容器這個詞婴谱。不過蟹但,如果要形象的理解Linux Container技術(shù)的話,還是得念成集裝箱會比較好谭羔。我們知道华糖,海邊碼頭里的集裝箱是運(yùn)載貨物用的,它是一種按規(guī)格標(biāo)準(zhǔn)化的鋼制箱子口糕。集裝箱的特色缅阳,在于其格式劃一,并可以層層重疊景描,所以可以大量放置在特別設(shè)計(jì)的遠(yuǎn)洋輪船中(早期航運(yùn)是沒有集裝箱概念的十办,那時候貨物雜亂無章的放,很影響出貨和運(yùn)輸效率)超棺。有了集裝箱向族,那么這就更加快捷方便的為生產(chǎn)商提供廉價的運(yùn)輸服務(wù)。
因此棠绘,IT世界里借鑒了這一理念件相。早期再扭,大家都認(rèn)為硬件抽象層基于hypervisor的虛擬化方式可以最大程度上提供虛擬化管理的靈活性。各種不同操作系統(tǒng)的虛擬機(jī)都能通過hypervisor(KVM夜矗、XEN等)來衍生泛范、運(yùn)行罢荡、銷毀。然而对扶,隨著時間推移,用戶發(fā)現(xiàn)hypervisor這種方式麻煩越來越多浪南。為什么?因?yàn)閷τ趆ypervisor環(huán)境來說络凿,每個虛擬機(jī)都需要運(yùn)行一個完整的操作系統(tǒng)以及其中安裝好的大量應(yīng)用程序。但實(shí)際生產(chǎn)開發(fā)環(huán)境里喷众,我們更關(guān)注的是自己部署的應(yīng)用程序各谚,如果每次部署發(fā)布我都得搞一個完整操作系統(tǒng)和附帶的依賴環(huán)境,那么這讓任務(wù)和性能變得很重和很低下到千。
基于上述情況,人們就在想赴穗,有沒有其他什么方式能讓人更加的關(guān)注應(yīng)用程序本身憔四,底層多余的操作系統(tǒng)和環(huán)境我可以共享和復(fù)用?換句話來說般眉,那就是我部署一個服務(wù)運(yùn)行好后了赵,我再想移植到另外一個地方,我可以不用再安裝一套操作系統(tǒng)和依賴環(huán)境甸赃。這就像集裝箱運(yùn)載一樣柿汛,我把貨物一輛蘭博基尼跑車(好比開發(fā)好的應(yīng)用APP),打包放到一容器集裝箱里埠对,它通過貨輪可以輕而易舉的從上海碼頭(CentOS7.2環(huán)境)運(yùn)送到紐約碼頭(Ubuntu14.04環(huán)境)络断。而且運(yùn)輸期間,我的蘭博基尼(APP)沒有受到任何的損壞(文件沒有丟失)项玛,在另外一個碼頭卸貨后貌笨,依然可以完美風(fēng)騷的賽跑(啟動正常)。
Linux Container容器技術(shù)的誕生(2008年)就解決了IT世界里“集裝箱運(yùn)輸”的問題襟沮。Linux Container(簡稱LXC)它是一種內(nèi)核輕量級的操作系統(tǒng)層虛擬化技術(shù)锥惋。Linux Container主要由Namespace和Cgroup兩大機(jī)制來保證實(shí)現(xiàn)昌腰。那么Namespace和Cgroup是什么呢?剛才我們上面提到了集裝箱膀跌,集裝箱的作用當(dāng)然是可以對貨物進(jìn)行打包隔離了遭商,不讓A公司的貨跟B公司的貨混在一起,不然卸貨就分不清楚了捅伤。那么Namespace也是一樣的作用劫流,做隔離。光有隔離還沒用暑认,我們還需要對貨物進(jìn)行資源的管理困介。同樣的,航運(yùn)碼頭也有這樣的管理機(jī)制:貨物用什么樣規(guī)格大小的集裝箱蘸际,貨物用多少個集裝箱座哩,貨物哪些優(yōu)先運(yùn)走,遇到極端天氣怎么暫停運(yùn)輸服務(wù)怎么改航道等等… 通用的粮彤,與此對應(yīng)的Cgroup就負(fù)責(zé)資源管理控制作用根穷,比如進(jìn)程組使用CPU/MEM的限制,進(jìn)程組的優(yōu)先級控制导坟,進(jìn)程組的掛起和恢復(fù)等等屿良。
二、容器技術(shù)的特點(diǎn)
容器的特點(diǎn)其實(shí)我們拿跟它跟硬件抽象層虛擬化hypervisor技術(shù)對比就清楚了惫周,我們之前也提到過,傳統(tǒng)的虛擬化(虛擬機(jī))技術(shù)喷橙,創(chuàng)建環(huán)境和部署應(yīng)用都很麻煩登舞,而且應(yīng)用的移植性也很繁瑣菠秒,比如你要把vmware里的虛擬機(jī)遷移到KVM里就很繁瑣(需要做鏡像格式的轉(zhuǎn)換)践叠。那么有了容器技術(shù)就簡單了,總結(jié)下容器技術(shù)主要有三個特點(diǎn):
\1. 極其輕量:只打包了必要的Bin/Lib轧简;
\2. 秒級部署:根據(jù)鏡像的不同哮独,容器的部署大概在毫秒與秒之間(比虛擬機(jī)強(qiáng)很多);
\3. 易于移植:一次構(gòu)建舟扎,隨處部署睹限;
\4. 彈性伸縮:Kubernetes羡疗、Swam别洪、Mesos這類開源挖垛、方便、好使的容器管理平臺有著非常強(qiáng)大的彈性管理能力送矩。
三栋荸、容器的標(biāo)準(zhǔn)化
當(dāng)前蒸其,docker幾乎是容器的代名詞,很多人以為docker就是容器钥顽。其實(shí),這是錯誤的認(rèn)識闽铐,除了docker 還有coreos兄墅。所以隙咸,容器世界里并不是只有docker一家。既然不是一家就很容易出現(xiàn)分歧藏否。任何技術(shù)出現(xiàn)都需要一個標(biāo)準(zhǔn)來規(guī)范它副签,不然各搞各的很容易導(dǎo)致技術(shù)實(shí)現(xiàn)的碎片化淆储,出現(xiàn)大量的沖突和冗余。因此本砰,在2015年灌具,由Google咖楣,Docker、CoreOS诱贿、IBM珠十、微軟凭豪、紅帽等廠商聯(lián)合發(fā)起的OCI(Open Container Initiative)組織成立了嫂伞,并于2016年4月推出了第一個開放容器標(biāo)準(zhǔn)帖努。標(biāo)準(zhǔn)主要包括runtime運(yùn)行時標(biāo)準(zhǔn)和image鏡像標(biāo)準(zhǔn)。標(biāo)準(zhǔn)的推出污桦,有助于替成長中市場帶來穩(wěn)定性凡橱,讓企業(yè)能放心采用容器技術(shù),用戶在打包躲惰、部署應(yīng)用程序后变抽,可以自由選擇不同的容器Runtime;同時诡宗,鏡像打包塔沃、建立蛀柴、認(rèn)證矫夯、部署训貌、命名也都能按照統(tǒng)一的規(guī)范來做递沪。
兩種標(biāo)準(zhǔn)主要包含以下內(nèi)容:
容器運(yùn)行時標(biāo)準(zhǔn) (runtime spec)
a). creating:使用 create 命令創(chuàng)建容器,這個過程稱為創(chuàng)建中 b). created:容器創(chuàng)建出來儒飒,但是還沒有運(yùn)行约素,表示鏡像和配置沒有錯誤,容器能夠運(yùn)行在當(dāng)前平臺 c). running:容器的運(yùn)行狀態(tài)乞而,里面的進(jìn)程處于 up 狀態(tài),正在執(zhí)行用戶設(shè)定的任務(wù) d). stopped:容器運(yùn)行完成爪模,或者運(yùn)行出錯屋灌,或者 stop 命令之后,容器處于暫停狀態(tài)祠丝。這個狀態(tài)写半,容器還有很多信息保存在平臺中尉咕,并沒有完全被刪除
容器鏡像標(biāo)準(zhǔn)(image spec)
a). 文件系統(tǒng):以 layer 保存的文件系統(tǒng),每個 layer 保存了和上層之間變化的部分悔捶,layer 應(yīng)該保存哪些文件蜕该,怎么表示增加缓溅、修改和刪除的文件等; b). config 文件:保存了文件系統(tǒng)的層級信息(每個層級的 hash 值坛怪,以及歷史信息)袜匿,以及容器運(yùn)行時需要的一些信息(比如環(huán)境變量居灯、工作目錄怪嫌、命令參數(shù)、mount 列表)拌倍,指定了鏡像在某個特定平臺和系統(tǒng)的配置柱恤。比較接近我們使用 docker inspect 看到的內(nèi)容; c). manifest 文件:鏡像的 config 文件索引,有哪些 layer泡孩,額外的 annotation 信息仑鸥,manifest 文件中保存了很多和當(dāng)前平臺有關(guān)的信息; d). index 文件:可選的文件锈候,指向不同平臺的 manifest 文件泵琳,這個文件能保證一個鏡像可以跨平臺使用誊役,每個平臺擁有不同的 manifest 文件蛔垢,使用 index 作為索引鹏漆。
四艺玲、容器的主要應(yīng)用場景
容器技術(shù)的誕生其實(shí)主要解決了PAAS的層的技術(shù)實(shí)現(xiàn)括蝠。像OpenStack、Cloudstack這樣的技術(shù)是解決IAAS層的問題饭聚。IAAS層和PAAS層大家估計(jì)也聽得很多了忌警,關(guān)于他們的區(qū)別和特性我這里不在描述。那么容器技術(shù)主要應(yīng)用在哪些場景呢秒梳?目前主流的有以下幾種:
\1. 容器化傳統(tǒng)應(yīng)用 容器不僅能提高現(xiàn)有應(yīng)用的安全性和可移植性法绵,還能節(jié)約成本。
每個企業(yè)的環(huán)境中都有一套較舊的應(yīng)用來服務(wù)于客戶或自動執(zhí)行業(yè)務(wù)流程酪碘。即使是大規(guī)模的單體應(yīng)用朋譬,通過容器隔離的增強(qiáng)安全性、以及可移植性特點(diǎn)兴垦,也能從 Docker 中獲益此熬,從而降低成本。一旦容器化之后,這些應(yīng)用可以擴(kuò)展額外的服務(wù)或者轉(zhuǎn)變到微服務(wù)架構(gòu)之上扶关。
\2. 持續(xù)集成和持續(xù)部署 (CI/CD) 通過 Docker 加速應(yīng)用管道自動化和應(yīng)用部署,交付速度提高至少 13 倍。
現(xiàn)代化開發(fā)流程快速咆蒿、持續(xù)且具備自動執(zhí)行能力蒂破,最終目標(biāo)是開發(fā)出更加可靠的軟件。通過持續(xù)集成 (CI) 和持續(xù)部署 (CD),每次開發(fā)人員簽入代碼并順利測試之后,IT 團(tuán)隊(duì)都能夠集成新代碼。作為開發(fā)運(yùn)維方法的基礎(chǔ),CI/CD 創(chuàng)造了一種實(shí)時反饋回路機(jī)制荚斯,持續(xù)地傳輸小型迭代更改兽泣,從而加速更改,提高質(zhì)量。CI 環(huán)境通常是完全自動化的,通過 git 推送命令觸發(fā)測試,測試成功時自動構(gòu)建新鏡像诗眨,然后推送到 Docker 鏡像庫芋簿。通過后續(xù)的自動化和腳本,可以將新鏡像的容器部署到預(yù)演環(huán)境,從而進(jìn)行進(jìn)一步測試廓潜。
\3. 微服務(wù) 加速應(yīng)用架構(gòu)現(xiàn)代化進(jìn)程。
應(yīng)用架構(gòu)正在從采用瀑布模型開發(fā)法的單體代碼庫轉(zhuǎn)變?yōu)楠?dú)立開發(fā)和部署的松耦合服務(wù)味滞。成千上萬個這樣的服務(wù)相互連接就形成了應(yīng)用。Docker 允許開發(fā)人員選擇最適合于每種服務(wù)的工具或技術(shù)棧哪痰,隔離服務(wù)以消除任何潛在的沖突肋演,從而避免“地獄式的矩陣依賴”。這些容器可以獨(dú)立于應(yīng)用的其他服務(wù)組件,輕松地共享、部署该酗、更新和瞬間擴(kuò)展笨蚁。Docker 的端到端安全功能讓團(tuán)隊(duì)能夠構(gòu)建和運(yùn)行最低權(quán)限的微服務(wù)模型,服務(wù)所需的資源(其他應(yīng)用贷笛、涉密信息、計(jì)算資源等)會適時被創(chuàng)建并被訪問繁疤。
\4. IT 基礎(chǔ)設(shè)施優(yōu)化 充分利用基礎(chǔ)設(shè)施,節(jié)省資金我衬。
Docker 和容器有助于優(yōu)化 IT 基礎(chǔ)設(shè)施的利用率和成本。優(yōu)化不僅僅是指削減成本俱恶,還能確保在適當(dāng)?shù)臅r間有效地使用適當(dāng)?shù)馁Y源合是。容器是一種輕量級的打包和隔離應(yīng)用工作負(fù)載的方法荔烧,所以 Docker 允許在同一物理或虛擬服務(wù)器上毫不沖突地運(yùn)行多項(xiàng)工作負(fù)載臀稚。企業(yè)可以整合數(shù)據(jù)中心赖条,將并購而來的IT資源進(jìn)行整合蜓氨,從而獲得向云端的可遷移性调炬,同時減少操作系統(tǒng)和服務(wù)器的維護(hù)工作语盈。
---------------------
版權(quán)聲明:本文為CSDN博主「qcloudcommunity」的原創(chuàng)文章,遵循CC 4.0 by-sa版權(quán)協(xié)議缰泡,轉(zhuǎn)載請附上原文出處鏈接及本聲明刀荒。
原文鏈接:https://blog.csdn.net/QcloudCommunity/article/details/80940692