最近在阿里云的centos上一直在玩docker部署mysql。redis瓤鼻。tomcat秉版。springboot項(xiàng)目各種東西,一些docker的常用命令也搞的比較熟了茬祷,是時(shí)候從源頭理一下docker的發(fā)展和自身的學(xué)習(xí)過程了清焕,于時(shí)有了這篇博客。
為什么會有docker出現(xiàn)
一款產(chǎn)品從開發(fā)到上線祭犯,從操作系統(tǒng)秸妥,到運(yùn)行環(huán)境,在到應(yīng)用配置沃粗。作為開發(fā)+運(yùn)維之間的協(xié)作我們需要關(guān)心很多東西粥惧,特別是各種版本迭代之后,不同版本的環(huán)境兼容最盅,對很容易出現(xiàn)大問題突雪。
docker之所以發(fā)展的如此迅速,也是因?yàn)樗鼘Υ私o出了一個(gè)標(biāo)準(zhǔn)化的解決方案涡贱。
環(huán)境配置如此麻煩咏删,換一臺機(jī)器,就要重來一次问词,費(fèi)時(shí)費(fèi)力督函。比如我在本地開發(fā)一個(gè)ssm項(xiàng)目,部署到阿里云或者華為云上激挪,就要在其中安裝jdk環(huán)境辰狡,配置相關(guān)環(huán)境變量等等。那么能不能從源頭解決問題垄分?開發(fā)好的項(xiàng)目是否可以帶環(huán)境安裝宛篇?
docker就完美的給出了這個(gè)問題的答案,也就是說安裝的時(shí)候锋喜,把原始環(huán)境一摸一樣的復(fù)制過來些己。開發(fā)人員利用docker可以消除協(xié)作編碼時(shí)“在我的機(jī)器上是否正常工作的問題”
傳統(tǒng)上認(rèn)為,軟件編碼開發(fā)/測試結(jié)束后嘿般,所產(chǎn)出的成果即是程序或是能夠編譯執(zhí)行的二進(jìn)制字節(jié)碼等(java為例)。而為了讓這些程序可以順利執(zhí)行涯冠,開發(fā)團(tuán)隊(duì)也得準(zhǔn)備完整的部署文件炉奴,讓維運(yùn)團(tuán)隊(duì)得以部署應(yīng)用程式,開發(fā)需要清楚的告訴運(yùn)維部署團(tuán)隊(duì)蛇更,用的全部配置文件+所有軟件環(huán)境瞻赶。不過赛糟,即便如此,仍然常常發(fā)生部署失敗的狀況砸逊。Docker鏡像的設(shè)計(jì)璧南,使得Docker得以打破過去「程序即應(yīng)用」的觀念。透過鏡像(images)將作業(yè)系統(tǒng)核心除外师逸,運(yùn)作應(yīng)用程式所需要的系統(tǒng)環(huán)境司倚,由下而上打包,達(dá)到應(yīng)用程式跨平臺間的無縫接軌運(yùn)作篓像。
docker的理念是什么
docker的主要目標(biāo)是“Build动知,Ship and Run Any App,Anywhere”,也就是通過對應(yīng)用組件的封裝/分發(fā)/部署/運(yùn)行等生命周期的管理员辩,使用戶的app諸如web應(yīng)用或數(shù)據(jù)庫應(yīng)用等等及其運(yùn)行環(huán)境能夠做到“一次封裝盒粮,到處運(yùn)行”(怎么聽著這么像write once,run anywhere奠滑。docker要搶java的飯碗啦)
linux容器技術(shù)的出現(xiàn)就解決了這樣一個(gè)問題丹皱,而docker就是在它的基礎(chǔ)上發(fā)展過來的。將應(yīng)用運(yùn)行在docker容器上面宋税,而docker容器在任何操作系統(tǒng)上都是一致的摊崭,這就實(shí)現(xiàn)了跨平臺/跨服務(wù)器。只需要一次配置好環(huán)境弃甥,換到別的機(jī)子上就可以一鍵部署好爽室,大大簡化了操作。
docker的出現(xiàn)解決了運(yùn)行環(huán)境和配置問題的軟件容器淆攻,方便做持續(xù)集成并有助于整體發(fā)布的容器虛擬化技術(shù)阔墩。