Docker學(xué)習(xí)筆記(一) 簡介
寫在前面
學(xué)習(xí)Docker已經(jīng)有大半年了,前段時(shí)間一直因?yàn)楣ぷ髅Φ貌豢砷_交,清閑下來之后還是決定繼續(xù)擼博客,記錄下自己學(xué)習(xí)的過程,同時(shí)也給猿友們一些參考,寫得不對的地方,也請大家指出來。
??接下來我要開始我的表演了~
概述
隨著云計(jì)算的發(fā)展,容器技術(shù)變得越來越火,其中最出眾的當(dāng)屬Docker。Docker也可以叫做輕量化虛擬技術(shù),但它并不是虛擬機(jī)。相比傳統(tǒng)的VM,它可以做到秒級啟動,占用資源更少,一臺服務(wù)器可以啟動成千上萬的容器。
??Docker以容器為資源分割和調(diào)度的基本單位,基于LXC技術(shù)對進(jìn)程進(jìn)行隔離,這一個個進(jìn)程就是Docker容器??梢栽诎惭b了Docker的linux服務(wù)器上輸入命令pstree,如下圖所示,即可看到OS的進(jìn)程樹,其中就有Docker容器的進(jìn)程樹。
??Docker的每一個容器都封裝了應(yīng)用程序的代碼,運(yùn)行時(shí)的環(huán)境,依賴,配置文件等,與VM不同,容器不會捆綁一個完整的操作系統(tǒng)。所以Docker可以跨平臺,發(fā)布和運(yùn)行分布式應(yīng)用,不受操作系統(tǒng)的限制,只要機(jī)器裝了Docker,就可以愉快的pull需要的鏡像,然后運(yùn)行容器啦~這對于運(yùn)維人員來說,就會大大降低他們的工作量,他們不用管這個容器里面需要運(yùn)行的是Java,Node還是Python,所有的操作都被統(tǒng)一成了docker pull ...,docker run...。這就解決了程序員嘴里常說的一個問題:這東西明明在我機(jī)器上都能運(yùn)行,怎么在你那里就不行了。
?? Docker改變了整個軟件開發(fā)和部署的流程,按照我們傳統(tǒng)的方式。以Java為例,我們要在服務(wù)器上運(yùn)行一個Java應(yīng)用,這時(shí)候我們需要先安裝JDK,JDK安裝好了,開始擼代碼,這時(shí)候需要maven來做項(xiàng)目依賴管理和打包,又得安裝maven,這些完成之后,發(fā)現(xiàn)還需要一個servlet容器來運(yùn)行我們的項(xiàng)目,這時(shí)候又要搞一個tomcat或者jetty。這時(shí)候有的朋友會說:我就是學(xué)java的,這些環(huán)境配置根本難不倒我。沒錯,這些環(huán)境配置確實(shí)很基礎(chǔ),但是到了后面業(yè)務(wù)量劇增的時(shí)候,我們又要加服務(wù)器,這時(shí)候又得重復(fù)相同的環(huán)境配置工作。有了Docker,我們可以把這些組件打包成一個個鏡像,推送到自建的私庫,每次只需要從私庫中拉下鏡像,運(yùn)行容器,搞定~是不是更加輕松加愉快呢。開發(fā)人員還可以通過CI工具比如jenkins來實(shí)現(xiàn)自動化部署發(fā)布,而操作的對象都是一個個的Docker容器。
總結(jié)
??Docker官方logo的寓意非常明確,Docker容器就像一個個的集裝箱,不用管里面裝的是什么,只要裝好了,放上船,就可以到任何地方使用。
?? Docker使用簡單,不用費(fèi)很大力氣就能入門,多多練習(xí)就能非常熟練。但是Docker相關(guān)知識較多,也需要多花些時(shí)間才能學(xué)到精髓。