人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Docker工作模式及原理詳解

發(fā)布日期:2021-12-10 07:51 | 文章來源:站長之家

如下圖所示:

我們在使用虛擬機和docker的時候,就會出現(xiàn)這樣一個疑問:Docker為什么比VM虛擬機快呢?

上面這張圖就很客觀的說明了這個問題

1、Docker有著比虛擬機更少的抽象層。

2、Docker利用的是宿主機的內(nèi)核,VM需要的是Guest os。

所以說,新建一個容器的時候,docker不需要像虛擬機一樣重新加載一個操作系統(tǒng)。虛擬機是加載Guest os(花費時間分鐘級別),而docker利用的是宿主機的操作系統(tǒng),省略了這個復雜的過程(花費時間秒級別)。

搞清楚這些,我們再來看看對客戶端來說,我們是怎么使用的?

首先得明白幾個名詞:

Host 主機(Docker 引擎)

一個物理或者虛擬的機器用于執(zhí)行 Docker 守護進程和容器。

Image 鏡像

什么是 Docker 鏡像?簡單的理解,Docker 鏡像就是一個 Linux 的文件系統(tǒng)(Root FileSystem),這個文件系統(tǒng)里面包含可以運行在 Linux 內(nèi)核的程序以及相應(yīng)的數(shù)據(jù)。
通過鏡像啟動一個容器,一個鏡像就是一個可執(zhí)行的包,其中包括運行應(yīng)用程序所需要的所有內(nèi)容:包含代碼,運行時間,庫,環(huán)境變量和配置文件等。
Docker 把 App 文件打包成為一個鏡像,并且采用類似多次快照的存儲技術(shù),可以實現(xiàn):

  • 多個 App 可以共用相同的底層鏡像(初始的操作系統(tǒng)鏡像);
  • App 運行時的 IO 操作和鏡像文件隔離;
  • 通過掛載包含不同配置/數(shù)據(jù)文件的目錄或者卷(Volume),單個 App 鏡像可以用來運行無數(shù)個不同業(yè)務(wù)的容器。

Container 容器

鏡像(Image)和容器(Container)的關(guān)系,就像是面向?qū)ο蟪绦蛟O(shè)計中的類和實例一樣,鏡像是靜態(tài)的定義,容器是鏡像運行時的實體。容器可以被創(chuàng)建、啟動、停止、刪除、暫停等。

鏡像分層

Docker 支持通過擴展現(xiàn)有鏡像,創(chuàng)建新的鏡像。實際上,Docker Hub 中 99% 的鏡像都是通過在 base 鏡像中安裝和配置需要的軟件構(gòu)建出來的。

從上圖可以看到,新鏡像是從 base 鏡像一層一層疊加生成的。每安裝一個軟件,就在現(xiàn)有鏡像的基礎(chǔ)上增加一層。
鏡像分層最大的一個好處就是共享資源。比如說有多個鏡像都從相同的 base 鏡像構(gòu)建而來,那么 Docker Host 只需在磁盤上保存一份 base 鏡像;同時內(nèi)存中也只需加載一份 base 鏡像,就可以為所有容器服務(wù)了。而且鏡像的每一層都可以被共享。
如果多個容器共享一份基礎(chǔ)鏡像,當某個容器修改了基礎(chǔ)鏡像的內(nèi)容,比如 /etc 下的文件,這時其他容器的 /etc 是不會被修改的,修改只會被限制在單個容器內(nèi)。這就是容器 Copy-on-Write 特性。

可寫的容器層

當容器啟動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。

所有對容器的改動 - 無論添加、刪除、還是修改文件都只會發(fā)生在容器層中。只有容器層是可寫的,容器層下面的所有鏡像層都是只讀的。

鏡像層數(shù)量可能會很多,所有鏡像層會聯(lián)合在一起組成一個統(tǒng)一的文件系統(tǒng)。如果不同層中有一個相同路徑的文件,比如 /a,上層的 /a 會覆蓋下層的 /a,也就是說用戶只能訪問到上層中的文件 /a。在容器層中,用戶看到的是一個疊加之后的文件系統(tǒng)。

只有當需要修改時才復制一份數(shù)據(jù),這種特性被稱作 Copy-on-Write??梢?,容器層保存的是鏡像變化的部分,不會對鏡像本身進行任何修改。

總結(jié)下來就是:容器層記錄對鏡像的修改,所有鏡像層都是只讀的,不會被容器修改,所以鏡像可以被多個容器共享。

Volume 數(shù)據(jù)卷

實際上我們的容器就好像是一個簡易版的操作系統(tǒng),只不過系統(tǒng)中只安裝了我們的程序運行所需要的環(huán)境,前邊說到我們的容器是可以刪除的,那如果刪除了,容器中的程序產(chǎn)生的需要持久化的數(shù)據(jù)怎么辦呢?容器運行的時候我們可以進容器去查看,容器一旦刪除就什么都沒有了。

所以數(shù)據(jù)卷就是來解決這個問題的,是用來將數(shù)據(jù)持久化到我們宿主機上,與容器間實現(xiàn)數(shù)據(jù)共享,簡單的說就是將宿主機的目錄映射到容器中的目錄,應(yīng)用程序在容器中的目錄讀寫數(shù)據(jù)會同步到宿主機上,這樣容器產(chǎn)生的數(shù)據(jù)就可以持久化了,比如我們的數(shù)據(jù)庫容器,就可以把數(shù)據(jù)存儲到我們宿主機上的真實磁盤中。

Registry 注冊中心

Docker 用 Registry 來保存用戶構(gòu)建的鏡像。Registry 分為公共和私有兩種。Docker 公司運營公共的 Registry 叫做 Docker Hub。用戶可以在 Docker Hub 注冊賬號,分享并保存自己的鏡像。

Docker 公司提供了公共的鏡像倉庫 hub.docker.com(Docker 稱之為 Repository)提供了龐大的鏡像集合供使用。

一個 Docker Registry 中可以包含多個倉庫(Repository);每個倉庫可以包含多個標簽(Tag);每個標簽對應(yīng)一個鏡像。

通常,一個倉庫會包含同一個軟件不同版本的鏡像,而標簽對應(yīng)該軟件的各個版本。我們可以通過 <倉庫名>:<標簽> 的格式來指定具體是這個軟件哪個版本的鏡像。如果不給出標簽,將以 latest 作為默認標簽。

總結(jié)

Docker 官網(wǎng)寫著這樣一句話:Build and Ship any Application Anywhere,再結(jié)合剛才我們所理解的內(nèi)容,總結(jié)下來就是:一次構(gòu)建,到處運行。
此外,Docker 公司提供了公共的鏡像倉庫 hub.docker.com(Docker 稱之為 Repository),GitHub connect,自動構(gòu)建鏡像,大大簡化了應(yīng)用分發(fā)、部署、升級流程。加上 Docker 可以非常方便的建立各種自定義的鏡像文件,這些都是 Docker 成為最流行的容器技術(shù)的重要因素。

通過以上這些技術(shù)的組合,最后的結(jié)果就是:絕大部分應(yīng)用,開發(fā)者都可以通過 docker build 創(chuàng)建鏡像,通過 docker push 上傳鏡像,用戶通過 docker pull 下載鏡像,使用 docker run 運行容器應(yīng)用。用戶不再需要去關(guān)心如何搭建環(huán)境,如何安裝,如何解決不同發(fā)行版的庫沖突——而且通常不會消耗更多的硬件資源,不會明顯降低性能。

以上就是Docker工作模式及原理詳解的詳細內(nèi)容,更多關(guān)于Docker工作模式及原理的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部