作者:__lifanxin
鏈接:https://blog.csdn.net/A951860555/article/details/109982889
來源:CSDN
著作權(quán)歸作者所有魄健,任何形式的轉(zhuǎn)載都請聯(lián)系作者罪既。
Docker簡介
為啥會出現(xiàn)Docker脐供?
??在以往的傳統(tǒng)開發(fā)過程中伐债,開發(fā)工程師負責代碼的編寫舶替,將在本地開發(fā)環(huán)境中運行無誤的代碼交由測試人員測試或者進一步交給運維人員進行部署。由于只給了代碼,而測試人員或者運維人員所使用的運行環(huán)境往往和開發(fā)工程師的開發(fā)環(huán)境不一樣,所以會產(chǎn)生一系列由于環(huán)境不同而導致的問題巍实。所以要解決這一問題就需要在開發(fā)和測試中部署一樣的環(huán)境,如果僅僅依靠傳統(tǒng)的部署方式:新裝一個相同的系統(tǒng)哩牍,配置相同的組件等等棚潦,這樣很耗費時間,而Docker的出現(xiàn)就巧妙的解決了這一問題膝昆。
Docker是什么丸边?
??Docker是基于Go語言實現(xiàn)的云開源項目,它是一個開源的應(yīng)用容器引擎(關(guān)于容器虛擬技術(shù)荚孵,后面會講)妹窖,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windows機器上收叶,也可以實現(xiàn)虛擬化骄呼。容器是完全使用沙箱機制,相互之間不會有任何接口判没。
更多詳細的介紹可以參見[百度百科]
虛擬機技術(shù)和容器虛擬技術(shù)
??相信各位都是使用過虛擬機吧蜓萄,它就是一個應(yīng)用軟件,但可以在原來的宿主機上虛擬出新的操作系統(tǒng)澄峰,還能虛擬相應(yīng)的硬件嫉沽。所以其實虛擬機也是一種帶環(huán)境安裝的解決方案,也能解決上面開發(fā)和測試人員面臨的問題俏竞,但裝一個虛擬機比在服務(wù)器上直接部署節(jié)約不了多少時間耻蛇。
??由于虛擬機存在一定的缺點,所以衍生出了容器虛擬技術(shù)胞此。Docker使用的就是容器虛擬技術(shù)臣咖,容器虛擬技術(shù)不是模擬一個完整的操作系統(tǒng),而是對進程實現(xiàn)隔離漱牵。它將軟件運行所需要的所有資源打包到一個隔離的容器中夺蛇,不用一整套的操作系統(tǒng),也不需要多余的硬件配置酣胀,所以容器虛擬技術(shù)高效輕量刁赦。
??因此Docker有著比虛擬機更少的抽象層,不用實現(xiàn)硬件資源的虛擬化闻镶,在CPU甚脉、內(nèi)存利用率上更有效率;其次其使用的是宿主機的內(nèi)核铆农,Docker的容器虛擬技術(shù)不需要重新加載一個操作系統(tǒng)內(nèi)核牺氨,從而避免了這個耗時的過程。因此效率上Docker是秒級的,而虛擬機是分鐘級的猴凹。
??下面的表展示了虛擬機和Docker容器技術(shù)的一些區(qū)別:
虛擬機技術(shù) | Docker |
---|---|
宿主機上運行虛擬機OS | 與宿主機共享OS |
鏡像龐大 | 鏡像小夷狰,便于存儲與運輸 |
資源占用多 | 資源占用少 |
可以虛擬硬件 | 沒有虛擬硬件 |
啟動慢 | 啟動快 |
笨重,移植性差 | 輕便郊霎、靈活沼头、高度可移植性 |
Docker詳解
Docker三大要素
??Docker中有三個重要的概念即三大要素:倉庫、鏡像书劝、容器进倍。
??我們對照著上面的Docker架構(gòu)圖來進行分析,從右往左開始:最右邊是Registry购对,Registry代表Docker遠程倉庫的注冊服務(wù)器背捌,這里面存放著很多遠程的Repository(倉庫)。每個倉庫里面會存放很多可用的Image(鏡像)洞斯,這個概念可以類比虛擬機的鏡像毡庆,所以倉庫中會有ubuntu、mysql等等常見系統(tǒng)或應(yīng)用的鏡像烙如,但比虛擬機的更輕量即鏡像文件體積更小么抗。
??中間是Docker Host,這是運行Docker的主機亚铁,這里面會包含Image(鏡像)和Container(容器)蝇刀。如圖所見,鏡像是一個只讀的模板徘溢,它可以來自不同的倉庫吞琐,并且可以實例化出容器。一個鏡像可以實例化出多個容器然爆,每個容器可以獨立運行一個或一組應(yīng)用站粟,且每個容器相互隔離,可以看成輕量級的虛擬機曾雕,不管我們生成的是ubuntu操作系統(tǒng)的容器還是Mysql數(shù)據(jù)庫的容器奴烙,都可以直接運行,其本身是自帶可運行環(huán)境的剖张,且容器是可讀可寫的切诀。在這里我們可以將鏡像比作面向編程中的類,容器就是類實例出來的對象搔弄,比如我們從倉庫中遠程拉下一個mysql數(shù)據(jù)庫鏡像幅虑,然后我們在主機中以這個鏡像為模板實例出5個容器,那么我們現(xiàn)在就有了5個可用的mysql數(shù)據(jù)庫且自身帶有可運行的環(huán)境顾犹,可以在每個數(shù)據(jù)庫中寫入不同的用戶倒庵、庫褒墨、表等。
??最左邊是Docker Client哄芜,也就是Docker運行的客戶端程序貌亭,就像mysql可以使用客戶端訪問遠程數(shù)據(jù)庫一樣柬唯。如果我們有一臺運行Docker Host的服務(wù)器在云端认臊,那么在本地我們的電腦就不需要安裝Docker Host,只用安裝client客戶端锄奢,然后遠程連接到Host執(zhí)行相應(yīng)的拉取鏡像和運行容器等操作失晴。
??現(xiàn)在我們可以統(tǒng)一梳理一下Docker的工作原理:Docker是一個容器運行載體或者管理引擎。我們將應(yīng)用程序和環(huán)境依賴以一種輕量級的方式打包好形成一個可交付的鏡像模板拘央。鏡像可以存放在倉庫中涂屁,在使用的時候,可以遠程拉取灰伟,然后實例化出容器拆又,這個容器就是我們真正運行的服務(wù)。
Docker的安裝
Docker配置阿里云倉庫
??Docker官方的倉庫服務(wù)器在國外栏账,所內(nèi)國內(nèi)訪問速度很慢帖族,一般我們都會像配置ubuntu系統(tǒng)源一樣重新配置Docker的倉庫。這里我們所說的阿里云倉庫即上文中提到的Repository挡爵,其中存放了大量可用的應(yīng)用鏡像竖般。點擊下面的鏈接,登錄后按照官方教程操作即可茶鹃,配置完后需要重啟Docker涣雕。
Docker應(yīng)用場景
??通過以上粗略的介紹,我們可以發(fā)現(xiàn)Docker的強大之處闭翩。除了上文最初提到的解決開發(fā)和測試之間的環(huán)境問題外挣郭,我們也常將Docker用于集群部署。
??另外Docker的優(yōu)勢在于是一個輕量級的虛擬機疗韵,所以在學習工作中可以使用虛擬機的場景也可以使用Docker來解決丈屹,并且效率更高。比如有時候做計算機網(wǎng)絡(luò)實驗伶棒,可能需要模擬5-10臺網(wǎng)絡(luò)節(jié)點之間的通信旺垒。如果使用虛擬機,那么一臺普通的筆記本(8G內(nèi)存肤无,i5的cpu先蒋,機械硬盤)是難以承受的,特別是機械硬盤和內(nèi)存不足的電腦宛渐,使用虛擬機的體驗極差竞漾,而使用Docker則可以輕松解決這一問題眯搭。同時我們也可以輕松的將我們運行修改過后的容器實例重新打包成新的鏡像,之后在新的電腦上復(fù)現(xiàn)環(huán)境或者轉(zhuǎn)交給他人都是十分快捷和方便的业岁。