柚子快報激活碼778899分享:容器 Docker
柚子快報激活碼778899分享:容器 Docker
1.初識Docker
1.1.什么是Docker
微服務雖然具備各種各樣的優(yōu)勢,但服務的拆分通用給部署帶來了很大的麻煩。
分布式系統(tǒng)中,依賴的組件非常多,不同組件之間部署時往往會產生一些沖突。
在數百上千臺服務中重復部署,環(huán)境不一定一致,會遇到各種問題
1.1.1.應用部署的環(huán)境問題
大型項目組件較多,運行環(huán)境也較為復雜,部署時會碰到一些問題:
依賴關系復雜,容易出現兼容性問題
開發(fā)、測試、生產環(huán)境有差異
?
?例如一個項目中,部署時需要依賴于node.js、Redis、RabbitMQ、MySQL等,這些服務部署時所需要的函數庫、依賴項各不相同,甚至會有沖突。給部署帶來了極大的困難。
1.1.2.Docker解決依賴兼容問題
而Docker確巧妙的解決了這些問題,Docker是如何實現的呢?
Docker為了解決依賴的兼容問題的,采用了兩個手段:
將應用的Libs(函數庫)、Deps(依賴)、配置與應用一起打包
將每個應用放到一個隔離容器去運行,避免互相干擾
?
這樣打包好的應用包中,既包含應用本身,也保護應用所需要的Libs、Deps,無需再操作系統(tǒng)上安裝這些,自然就不存在不同應用之間的兼容問題了。
雖然解決了不同應用的兼容問題,但是開發(fā)、測試等環(huán)境會存在差異,操作系統(tǒng)版本也會有差異,怎么解決這些問題呢?
?
1.1.3.Docker解決操作系統(tǒng)環(huán)境差異
要解決不同操作系統(tǒng)環(huán)境差異問題,必須先了解操作系統(tǒng)結構。以一個Ubuntu操作系統(tǒng)為例,結構如下:
結構包括:
計算機硬件:例如CPU、內存、磁盤等
系統(tǒng)內核:所有Linux發(fā)行版的內核都是Linux,例如CentOS、Ubuntu、Fedora等。內核可以與計算機硬件交互,對外提供內核指令,用于操作計算機硬件。
系統(tǒng)應用:操作系統(tǒng)本身提供的應用、函數庫。這些函數庫是對內核指令的封裝,使用更加方便。
應用于計算機交互的流程如下:
1)應用調用操作系統(tǒng)應用(函數庫),實現各種功能
2)系統(tǒng)函數庫是對內核指令集的封裝,會調用內核指令
3)內核指令操作計算機硬件
Ubuntu和CentOSpringBoot都是基于Linux內核,無非是系統(tǒng)應用不同,提供的函數庫有差異:
?
此時,如果將一個Ubuntu版本的MySQL應用安裝到CentOS系統(tǒng),MySQL在調用Ubuntu函數庫時,會發(fā)現找不到或者不匹配,就會報錯了: ?
Docker如何解決不同系統(tǒng)環(huán)境的問題?
Docker將用戶程序與所需要調用的系統(tǒng)(比如Ubuntu)函數庫一起打包
Docker運行到不同操作系統(tǒng)時,直接基于打包的函數庫,借助于操作系統(tǒng)的Linux內核來運行
如圖:
?
1.1.4.小結
Docker如何解決大型項目依賴關系復雜,不同組件依賴的兼容性問題?
Docker允許開發(fā)中將應用、依賴、函數庫、配置一起打包,形成可移植鏡像
Docker應用運行在容器中,使用沙箱機制,相互隔離
Docker如何解決開發(fā)、測試、生產環(huán)境有差異的問題?
Docker鏡像中包含完整運行環(huán)境,包括系統(tǒng)函數庫,僅依賴系統(tǒng)的Linux內核,因此可以在任意Linux操作系統(tǒng)上運行
Docker是一個快速交付應用、運行應用的技術,具備下列優(yōu)勢:
可以將程序及其依賴、運行環(huán)境一起打包為一個鏡像,可以遷移到任意Linux操作系統(tǒng)
運行時利用沙箱機制形成隔離容器,各個應用互不干擾
啟動、移除都可以通過一行命令完成,方便快捷
?
1.2.Docker和虛擬機的區(qū)別
Docker可以讓一個應用在任何操作系統(tǒng)中非常方便的運行。而以前我們接觸的虛擬機,也能在一個操作系統(tǒng)中,運行另外一個操作系統(tǒng),保護系統(tǒng)中的任何應用。
兩者有什么差異呢?
虛擬機(virtual machine)是在操作系統(tǒng)中模擬硬件設備,然后運行另一個操作系統(tǒng),比如在 Windows 系統(tǒng)里面運行 Ubuntu 系統(tǒng),這樣就可以運行任意的Ubuntu應用了。
Docker僅僅是封裝函數庫,并沒有模擬完整的操作系統(tǒng),如圖:
對比來看: ?
小結:
Docker和虛擬機的差異:
docker是一個系統(tǒng)進程;虛擬機是在操作系統(tǒng)中的操作系統(tǒng)
docker體積小、啟動速度快、性能好;虛擬機體積大、啟動速度慢、性能一般
?
1.3.Docker架構
1.3.1.鏡像和容器
Docker中有幾個重要的概念:
鏡像(Image):Docker將應用程序及其所需的依賴、函數庫、環(huán)境、配置等文件打包在一起,稱為鏡像。
容器(Container):鏡像中的應用程序運行后形成的進程就是容器,只是Docker會給容器進程做隔離,對外不可見。
一切應用最終都是代碼組成,都是硬盤中的一個個的字節(jié)形成的文件。只有運行時,才會加載到內存,形成進程。
而鏡像,就是把一個應用在硬盤上的文件、及其運行環(huán)境、部分系統(tǒng)函數庫文件一起打包形成的文件包。這個文件包是只讀的。
容器呢,就是將這些文件中編寫的程序、函數加載到內存中允許,形成進程,只不過要隔離起來。因此一個鏡像可以啟動多次,形成多個容器進程。
例如你下載了一個QQ,如果我們將QQ在磁盤上的運行文件及其運行的操作系統(tǒng)依賴打包,形成QQ鏡像。然后你可以啟動多次,雙開、甚至三開QQ,跟多個妹子聊天。
1.3.2.DockerHub
開源應用程序非常多,打包這些應用往往是重復的勞動。為了避免這些重復勞動,人們就會將自己打包的應用鏡像,例如Redis、MySQL鏡像放到網絡上,共享使用,就像GitHub的代碼共享一樣。
DockerHub:DockerHub是一個官方的Docker鏡像的托管平臺。這樣的平臺稱為Docker Registry。
國內也有類似于DockerHub 的公開服務,比如 網易云鏡像服務、阿里
柚子快報激活碼778899分享:容器 Docker
推薦閱讀
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯系刪除。