前言
Docker 是一個
開源的應(yīng)用容器引擎
,讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的Linux或Windows
操作系統(tǒng)的機器上,也可以實現(xiàn)虛擬化,容器是完全使用沙箱機制,相互之間不會有任何接口。
??作者簡介:熱愛跑步的恒川,致力于C/C++、Java、Python等多編程語言,熱愛跑步,喜愛音樂的一位博主。
??本文收錄于恒川的日常匯報系列,大家有興趣的可以看一看
??相關(guān)專欄C語言初階、C語言進階系列等,大家有興趣的可以看一看
??Python零基礎(chǔ)入門系列,Java入門篇系列正在發(fā)展中,喜歡Python、Java的朋友們可以關(guān)注一下哦!
Docker是什么
Docker 是一個開源的應(yīng)用容器引擎,基于 Golang 語言開發(fā),可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 服務(wù)器。容器是一個沙箱機制,相互之間不會有影響(類似于我們手機上運行的 app),并且容器開銷是很低的。
Docker 是一個供開發(fā)人員和系統(tǒng)管理員構(gòu)建、運行和與容器共享應(yīng)用程序的平臺。使用容器部署應(yīng)用程序稱為容器化。容器并不是新事物,但它們用于輕松部署應(yīng)用程序卻是新鮮的。
注意:Docker并非是一個通用的容器工具,它依賴于已存在并運行的Linux內(nèi)核環(huán)境。
1. Docker的優(yōu)勢有哪些
- 靈活性:即使是最復(fù)雜的應(yīng)用程序也可以容器化。
- 輕量級:容器利用并共享主機內(nèi)核,使它們在系統(tǒng)資源方面比虛擬機更有效率。
- 可移植:您可以在本地構(gòu)建,部署到云上,并在任何地方運行。
- 松耦合:容器是高度自給自足和封裝的,允許您在不影響其他容器的情況下替換或升級其中一個。
- 可擴展:您可以跨數(shù)據(jù)中心增加和自動分發(fā)容器副本。
- 安全性:容器對進程應(yīng)用主動約束和隔離,而不需要用戶進行任何配置。
2. Docker的作用
Docker 是一個用于開發(fā)、傳送和運行應(yīng)用程序的開放平臺。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)設(shè)施分開,以便您可以快速交付軟件。使用 Docker,您可以像管理應(yīng)用程序一樣管理基礎(chǔ)設(shè)施。通過利用 Docker 的快速交付、測試和部署代碼的方法,您可以顯著減少編寫代碼和在生產(chǎn)中運行代碼之間的延遲。Docker(opens new window)是個劃時代的開源項目,它徹底釋放了計算虛擬化的威力,極大提高了應(yīng)用的維護效率,降低了云計算應(yīng)用開發(fā)的成本!使用 Docker,可以讓應(yīng)用的部署、測試和分發(fā)都變得前所未有的高效和輕松!無論是應(yīng)用開發(fā)者、運維人員、還是其他信息技術(shù)從業(yè)人員,都有必要認(rèn)識和掌握 Docker,節(jié)約有限的生命
。
Docker主要用來解決什么問題?
Docker的出現(xiàn)主要就是為了解決:在我的機器上運行時是正常的,但為什么到你的機器上就運行不正常了
。
比如你寫一個Web應(yīng)用,并且本地調(diào)試沒有任何問題。這時候你想發(fā)給你的朋友試試看或者發(fā)布部署到遠(yuǎn)程的云服務(wù)器上查看效果,那么首先你需要配置和你本地相同的軟件環(huán)境,如數(shù)據(jù)庫,Web服務(wù)器(IIS,Tomcat,Nginx),必要的插件,庫等等。而這你還不能保證的你的軟件一定能夠運行起來,因為別人可能用完全不同的操作系統(tǒng),即便是使用Linux每種發(fā)行版也會有微小的區(qū)別。
為了模擬完全相同的本地開發(fā)環(huán)境。
我們首先想到的就是虛擬機,但是虛擬機需要模擬硬件,運行整個操作系統(tǒng)不但體積臃腫內(nèi)存占用高,程序的性能也會受到影響。
3. Docker的脫穎而出
這時候Dokcer就派上了用場,Docker在概念上與虛擬機非常類似。但是Docker更輕量,它不會去模擬底層的硬件 ,只會為每一個應(yīng)用提供完全隔離的運行環(huán)境。你可以在容器中配置不同的應(yīng)用環(huán)境,并且不用的環(huán)境之間互相不影響,這個“環(huán)境”在Docker中也被稱作為Container(容器)。
4. Docker和虛擬機技術(shù)的區(qū)別
Docker 在容器的基礎(chǔ)上,進行了進一步的封裝,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進程隔離等等,極大的簡化了容器的創(chuàng)建和維護。使得 Docker技術(shù)比虛擬機技術(shù)更為輕便、快捷。
下面的圖片比較了 Docker 和傳統(tǒng)虛擬化方式的不同之處。傳統(tǒng)虛擬機技術(shù)是虛擬出一套硬件后,在其上運行一個完整操作系統(tǒng),在該系統(tǒng)上再運行所需應(yīng)用進程;而容器內(nèi)的應(yīng)用進程直接運行于宿主的內(nèi)核,容器內(nèi)沒有自己的內(nèi)核,而且也沒有進行硬件虛擬。因此容器要比傳統(tǒng)虛擬機更為輕便。
5. Docker容器和虛擬機的區(qū)別總結(jié)
特性 | docker容器 | 虛擬機 |
---|---|---|
啟動 | 秒級 | 分鐘級 |
硬盤使用 | 一般為MB | 一般為GB |
性能 | 接近原生(宿主機) | 弱于原生 |
系統(tǒng)支持量 | 單機支持上千個容器 | 一般幾十個 |
6. Docker中的三個重要概念
Docker中的三個重要概念分別是:Image(鏡像),Container(容器),Repository(倉儲)。
6.1 Image(鏡像)一個特殊的文件系統(tǒng)
你可以把它理解成一個虛擬機的快照(Snapshot),里面包含了你要部署的應(yīng)用程序以及它所關(guān)聯(lián)的所有庫。
操作系統(tǒng)分為內(nèi)核和用戶空間。對于Linux而言,內(nèi)核啟動后,會掛載root文件系統(tǒng)為其提供用戶空間支持。而Docker鏡像(Image),就相當(dāng)于是一個root文件系統(tǒng)。Docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。 鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。
6.2 Container(容器)鏡像運行時的實體
這里的容器就像是一臺臺運行起來的虛擬機,里面運行了你的應(yīng)用程序,每個容器是獨立運行的他們相互之間不影響。通過一個鏡像,我們可以創(chuàng)建許多個不同的Container容器。
鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和類的實例一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等 。容器的實質(zhì)是進程,但與直接在宿主執(zhí)行的進程不同,容器進程運行于屬于自己的獨立的命名空間。前面講過鏡像使用的是分層存儲,容器也是如此。容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡。因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。
6.3 Repository(倉儲)集中存放鏡像文件的地方
鏡像構(gòu)建完成后,可以很容易的在當(dāng)前宿主上運行,但是, 如果需要在其它服務(wù)器上使用這個鏡像,我們就需要一個集中的存儲、分發(fā)鏡像的服務(wù)(就像Git倉庫一樣),Docker Registry就是這樣的服務(wù)。
一個Docker Registry中可以包含多個倉庫(Repository),每個倉庫可以包含多個標(biāo)簽(Tag),每個標(biāo)簽對應(yīng)一個鏡像。所以說:鏡像倉庫是Docker用來集中存放鏡像文件的地方類似于我們之前常用的代碼倉庫。通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標(biāo)簽就常用于對應(yīng)該軟件的各個版本 。我們可以通過<倉庫名>:<標(biāo)簽>的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標(biāo)簽,將以latest作為默認(rèn)標(biāo)簽。
7. Docker 架構(gòu)及工作原理
Docker使用客戶端-服務(wù)器架構(gòu)。Docker 客戶端與 Docker 守護進程通信,后者負(fù)責(zé)構(gòu)建、運行和分發(fā)Docker容器等繁重的工作。Docker 客戶端和守護進程可以運行在同一個系統(tǒng)上,或者您可以將一個 Docker 客戶端連接到一個遠(yuǎn)程 Docker 守護進程。Docker 客戶端和守護進程通過 UNIX 套接字或網(wǎng)絡(luò)接口使用 REST API 進行通信。
8. 恒川本期書籍推薦
恒川贈書活動第六期:
我們世界中的計算機——從大師視角詮釋計算常識,做一個穿行于數(shù)字世界與現(xiàn)實世界的智者。
普林斯頓計算機公開課
本書作者
布萊恩·W.柯尼漢(Brian W. Kernighan)教授
是計算機領(lǐng)域的著名學(xué)者和先驅(qū)。關(guān)于布萊恩教授,人們耳熟能詳?shù)囊粋€傳奇是,他與C語言的發(fā)明者丹尼斯·里奇(Dennis Ritchie)合著的The C Programming Language一書被奉為C程序設(shè)計語言的經(jīng)典之作。之后,許多編程語言教程中的第一個示例都是打印出一句“Hello,World!”,就像在用編程語言這一計算機語言向世界問好,這個示例就是布萊恩教授首創(chuàng)的。布萊恩教授在大名鼎鼎的貝爾實驗室工作了30年左右,見證了UNIX這一偉大的操作系統(tǒng)的誕生,并做出了卓越貢獻。他還與人合作完成了著名的圖劃分問題和旅行商問題的算法,也是AWK和AMLP兩門編程語言的設(shè)計者之一。其中任何一項成就都足以讓人倍感榮耀,但布萊恩教授的成就遠(yuǎn)不止這些。在這之后他任職于普林斯頓大學(xué)計算機科學(xué)系,并開設(shè)了一門名為“我們世界中的計算機”(Computers in Our World)的課程,介紹計算機、通信、互聯(lián)網(wǎng)、數(shù)據(jù)等方面的核心知識和其中的隱私、安全等問題。這本書便是這門課程使用的教學(xué)材料。
本書篇幅不大,但對計算機和通信系統(tǒng)如何工作進行了詳細(xì)和透徹的解釋。本書展示了當(dāng)今的計算和通信世界是如何運作的,從硬件到軟件,再到互聯(lián)網(wǎng)和Web。本書也討論了新技術(shù)帶來的社會、政治和法律問題(雖然主要是從美國的角度),由此你可以理解我們所面臨的難題,并理解為了解決它們所必須做出的權(quán)衡。
參與送書方式
?本次活動一共贈書3本,評論區(qū)抽取3位小伙伴免費送出?。?br>?參與方式:關(guān)注博主、點贊、收藏、評論區(qū)評論 “ 計算機公開課我最行 ”(切記要點贊+收藏,否則抽獎無效,每個人最多評論三次?。。。?br>? 活動截止時間:2023-06-22 21:00:00
?通知方式:私信通知文章來源:http://www.zghlxwxcb.cn/news/detail-490759.html
如果這份博客對大家有幫助,希望各位給恒川一個免費的點贊??作為鼓勵,并評論收藏一下?,謝謝大家?。。?br> 制作不易,如果大家有什么疑問或給恒川的意見,歡迎評論區(qū)留言。文章來源地址http://www.zghlxwxcb.cn/news/detail-490759.html
到了這里,關(guān)于【Docker】Docker的優(yōu)勢、與虛擬機技術(shù)的區(qū)別、三個重要概念和架構(gòu)及工作原理的詳細(xì)講解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!