最近在研究Docker斤吐,總結(jié)了一些自己的理解搔涝,希望可以與大家分享。有錯誤的地方和措,也請大家不吝賜教庄呈,共同討論。
1.?docker是什么派阱?
docker是一種輕量的诬留、一次封裝即可隨處運行的虛擬化技術(shù)。
2.?docker和 VM等虛擬機的區(qū)別是什么贫母?
(1)虛擬化方式:
VM等傳統(tǒng)的虛擬機技術(shù)文兑,是基于硬件的虛擬化技術(shù)。將一個完整的物理機腺劣,分成多個子物理機绿贞,相互之間完全隔絕。
docker不會對底層硬件進行虛擬化橘原,它的虛擬化是操作系統(tǒng)層級的籍铁。多個容器分享一個操作系統(tǒng)內(nèi)核,不同的docker實例(也就是容器)內(nèi)部有自己的應(yīng)用依賴環(huán)境靠柑。
從外部看來寨辩,傳統(tǒng)的虛擬化技術(shù)(比如VM)每個虛擬機內(nèi)部的情況是不可見的。而docker則不然歼冰,由于是系統(tǒng)層級的虛擬化靡狞,所以每個容器在系統(tǒng)看來,都是一個線程(比如下圖隔嫡,一共啟動了3個容器甸怕,就會出現(xiàn)三個container的線程)
同時,由于docker的虛擬化并不能實現(xiàn)真正的隔絕腮恩,所以docker容器中的應(yīng)用梢杭,也同樣會暴露在外部的操作系統(tǒng)上(如下圖)
(2)操作系統(tǒng)體量:
系統(tǒng)上正常運行程序,離不開操作系統(tǒng)秸滴。一個完整的操作系統(tǒng)武契,包含兩部分:內(nèi)核+文件系統(tǒng)。
對于傳統(tǒng)的虛擬機,需要完整的安裝內(nèi)核與文件系統(tǒng)咒唆,因此所占空間非常大届垫,比如Ubuntu就需要20G+。
而就docker而言全释,虛擬化建立于操作系統(tǒng)以上装处,且不同版本的Linux內(nèi)核都是基本相同的,因此不需要安裝操作系統(tǒng)內(nèi)核浸船,只需要在引入相應(yīng)操作系統(tǒng)的鏡像即可妄迁,鏡像中就包含了對應(yīng)的文件系統(tǒng)。因此docker鏡像的提及非常小李命,同樣是Ubuntu登淘,docker鏡像,只有80M+项戴。
(3)啟動速度:
虛擬機在啟動時形帮,需要虛擬化硬件資源,啟動完整的操作系統(tǒng)周叮,因此耗時多
docker在啟動時,由docker引擎直接在宿主機操作系統(tǒng)上調(diào)用硬件資源界斜,以生成應(yīng)用的方式生成容器仿耽,耗時很短
3.?為什么要使用docker?
開發(fā)角度:
(1)快速搭建:快速搭建開發(fā)環(huán)境
(2)提高開發(fā)效率:使最終的生產(chǎn)環(huán)境與開發(fā)環(huán)境盡可能的一致各薇,避免因為環(huán)境問題導(dǎo)致上線錯誤
(3)提高利用率:避免使用虛擬機隔絕后造成的資源浪費项贺,同時只使用同一個操作系統(tǒng),減少了操作系統(tǒng)對內(nèi)存的占用峭判。
(4)避免沖突:多租戶環(huán)境开缎,不會造成沖突。
(5)統(tǒng)一管理:在docker倉庫中林螃,統(tǒng)一代碼的管理
運維角度:
(1)快速部署:測試結(jié)果正常的程序奕删,打包成鏡像后,可以直接在生產(chǎn)環(huán)境上展開疗认。
(2)高效遷移:減少了對于環(huán)境的依賴完残,可以實現(xiàn)一次部署,到處使用横漏。
測試角度:
(1)提高測試準確率:避免因為環(huán)境區(qū)別導(dǎo)致測試結(jié)果誤差谨设。
(2)避免打包遺漏:測試成功直接將環(huán)境打包為鏡像,還原時避免遺漏程序組件缎浇。
4.?docker的優(yōu)缺點有哪些扎拣?
優(yōu)點:
(1)輕量:docker鏡像體積小
(2)[endif]快速:可以快速生成容器
(3)[endif]一致性:開發(fā)->測試-運維上線系統(tǒng)環(huán)境完全一致
(4)統(tǒng)一管理:鏡像統(tǒng)一上傳至鏡像庫,方便追溯回滾
(5)低環(huán)境依賴:由于每個容器內(nèi)部都有自己的文件系統(tǒng),可以獨立安裝依賴環(huán)境二蓝。因此尊蚁,對外部操作系統(tǒng)的依賴極低
(6)資源利用率高:避免虛擬機內(nèi)各自系統(tǒng)對硬件資源的浪費
缺點:
(1)架構(gòu)要求:必須是64位
(2)系統(tǒng)要求:內(nèi)核3.8.0以上
(3)隔絕不徹底:由于是系統(tǒng)層級的虛擬化,內(nèi)存溢出侣夷、高CPU占用可能會多docker穩(wěn)定性造成影響