容器其實是一種沙盒技術(shù)。顧名思義谬俄,沙盒就是能夠像一個集裝箱一樣柏靶,把你的應用"裝"起來的技術(shù)。這樣溃论,應用與應用之間屎蜓,就因為有了邊界而不至于相互干擾;而被裝進集裝箱的應用钥勋,也可以被方便地搬來搬去炬转,這其實是 PaaS 最理想的狀態(tài)控汉。
問題:容器的本質(zhì)到底是什么?
容器的本質(zhì)是進程返吻。容器就是未來云計算系統(tǒng)中的進程姑子;容器鏡像就是這個系統(tǒng)里的".exe"安裝包。Kubernetes 就是操作系統(tǒng)测僵!
Docker介紹:
官網(wǎng):
????docker.io
????docker.com
公司名稱:原名dotCloud ?14年改名為docker
容器產(chǎn)品:docker 16年已經(jīng)被更名為Moby
容器
web容器 web中間件
????????html (nginx apache )
php (php模塊 ?php-fpm)
java(tomcat weblogic Resin JBoss ?WebSphere )
????????????python (uwsgi) ?web server gateway interface
nginx+tomcat+jdk weblogic
nginx+(nginx+php-fpm)
nginx+uwsgi+django
mycat ?mysql-proxy數(shù)據(jù)庫中間件 ??????????
devops(運維開發(fā)街佑,早些年指的運維和開發(fā)精通的。)
rd
1.部署開發(fā)環(huán)境 ?單機環(huán)境
2.軟件開發(fā)
3.測試
4.打包
op ??????????
1.測試環(huán)境 ??
2.線上環(huán)境(上線工具 u盤 ftp scp rsync svn git github gitlab ci/cd+容器平臺:git+jenkins+jdk+maven+tomcat+容器鏡像庫服務器+k8s集群 )
運維
1.rd開發(fā)產(chǎn)品(需要配置開發(fā)環(huán)境)lamp
2.測試(需要配置測試環(huán)境)
3.op上線(需要線上環(huán)境)
開發(fā)測試運維開戰(zhàn)
1. ?rd開發(fā)產(chǎn)品(需要在docker容器里配置開發(fā)環(huán)境) ?????
2.把容器打包成鏡像交給運維捍靠,運維上線 ??????
Docker跟原有的工具區(qū)別:
傳統(tǒng)的部署模式是:????安裝(包管理工具或者源碼包編譯)->配置->運行沐旨;
Docker的部署模式是:復制->運行。
容器和VM的主要區(qū)別:
1. 容器提供了基于進程的隔離榨婆,而虛擬機提供了資源的完全隔離磁携。
2. 虛擬機可能需要一分鐘來啟動,而容器只需要一秒鐘或更短良风。
3. 容器使用宿主操作系統(tǒng)的內(nèi)核谊迄,而虛擬機使用獨立的內(nèi)核
4.容器只是一個進程,而虛擬機不是
Docker對服務器端開發(fā)/部署帶來的變化:
實現(xiàn)更輕量級的虛擬化烟央,方便快速部署
對于部署來說可以極大的減少部署的時間成本和人力成本
Docker支持將應用打包進一個可以移植的容器中统诺,重新定義了應用開發(fā),測試疑俭,部署上線的過程粮呢,核心理念就
是Build once, Run anywhere
1)標準化應用發(fā)布,docker容器包含了運行環(huán)境和可執(zhí)行程序钞艇,可以跨平臺和主機使用啄寡;
2)節(jié)約時間,快速部署和啟動哩照,VM啟動一般是分鐘級挺物,docker容器啟動是秒級;
3)方便構(gòu)建基于SOA架構(gòu)或微服務架構(gòu)的系統(tǒng)葡秒,通過服務編排姻乓,更好的松耦合;
4)節(jié)約成本眯牧,以前一個虛擬機至少需要幾個G的磁盤空間蹋岩,docker容器可以減少到MB級;
5)方便持續(xù)集成学少,通過與代碼進行關(guān)聯(lián)使持續(xù)集成非常方便剪个;
6)可以作為集群系統(tǒng)的輕量主機或節(jié)點,在IaaS平臺上版确,已經(jīng)出現(xiàn)了CaaS扣囊,通過容器替代原來的主機乎折。
iaas ????infrastructure as a service
paas ???platform as a service
saas ???software as a service
dsaas ??data storage as a service
caas ???container as a service
Docker優(yōu)勢:
1、交付物標準化
Docker是軟件工程領(lǐng)域的"標準化"交付組件侵歇,最恰到好處的類比是"集裝箱"徽曲。
集裝箱將零散软能、不易搬運的大量物品封裝成一個整體,集裝箱更重要的意義在于它提供了一種通用的封裝貨物的
標準,卡車撤嫩、火車碎乃、貨輪皆疹、橋吊等運輸或搬運工具采用此標準扎狱,隧道、橋梁等也采用此標準伟叛。以集裝箱為中心的
標準化設計大大提高了物流體系的運行效率私痹。
傳統(tǒng)的軟件交付物包括:應用程序、依賴軟件安裝包统刮、配置說明文檔紊遵、安裝文檔、上線文檔等非標準化組件网沾。
Docker的標準化交付物稱為"鏡像"癞蚕,它包含了應用程序及其所依賴的運行環(huán)境蕊爵,大大簡化了應用交付的模式辉哥。
2、一次構(gòu)建攒射,多次交付
類似于集裝箱的"一次裝箱醋旦,多次運輸",Docker鏡像可以做到"一次構(gòu)建会放,多次交付"饲齐。當涉及到應用程序多副本
部署或者應用程序遷移時,更能體現(xiàn)Docker的價值咧最。
3捂人、應用隔離
集裝箱可以有效做到貨物之間的隔離,使化學物品和食品可以堆砌在一起運輸矢沿。Docker可以隔離不同應用程序之間的相互影響滥搭,但是比虛擬機開銷更小。
總之捣鲸,容器技術(shù)部署速度快瑟匆,開發(fā)、測試更敏捷栽惶;提高系統(tǒng)利用率愁溜,降低資源成本疾嗅。
Docker的度量:
Docker是利用容器來實現(xiàn)的一種輕量級的虛擬技術(shù),從而在保證隔離性的同時達到節(jié)省資源的目的冕象。Docker的
可移植性可以讓它一次建立代承,到處運行。Docker的度量可以從以下四個方面進行:
1)隔離性
Docker采用libcontainer作為默認容器渐扮,代替了以前的LXC次泽。libcontainer的隔離性主要是通過內(nèi)核的命名空
間來實現(xiàn)的,有pid席爽、net意荤、ipc、mnt只锻、uts命令空間玖像,將容器的進程、網(wǎng)絡齐饮、消息捐寥、文件系統(tǒng)和主機名進行隔
離。
2)可度量性
Docker主要通過cgroups控制組來控制資源的度量和分配祖驱。
3)移植性
Docker利用AUFS來實現(xiàn)對容器的快速更新握恳。
AUFS是一種支持將不同目錄掛載到同一個虛擬文件系統(tǒng)下的文件系統(tǒng),支持對每個目錄的讀寫權(quán)限管理捺僻。AUFS具有層
的概念乡洼,每一次修改都是在已有的只寫層進行增量修改,修改的內(nèi)容將形成新的文件層匕坯,不影響原有的層束昵。
4)安全性
安全性可以分為容器內(nèi)部之間的安全性;容器與托管主機之間的安全性葛峻。
容器內(nèi)部之間的安全性主要是通過命名空間和cgroups來保證的锹雏。
容器與托管主機之間的安全性主要是通過內(nèi)核能力機制的控制,可以防止Docker非法入侵托管主機术奖。
Docker容器使用AUFS作為文件系統(tǒng)礁遵,有如下優(yōu)勢:
1)節(jié)省存儲空間
多個容器可以共享同一個基礎鏡像存儲。
2)快速部署
如果部署多個來自同一個基礎鏡像的容器時采记,可以避免多次復制操作佣耐。
3)升級方便
升級一個基礎鏡像即可影響到所有基于它的容器。
4)增量修改
可以在不改變基礎鏡像的同時修改其目錄的文件挺庞,所有的更高都發(fā)生在最上層的寫操作層晰赞,增加了基礎鏡像的可共享內(nèi)容。