0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么需要Docker容器?Docker容器和VM有什么區(qū)別?

jf_HnAzBl9o ? 來源:網(wǎng)絡(luò)工程師筆記 ? 2023-09-27 09:21 ? 次閱讀

容器技術(shù)這幾年,真的是特別火爆啊。

盡管容器技術(shù)已經(jīng)出現(xiàn)很久了,卻是隨著Docker的出現(xiàn)而變得廣為人知的。

Docker是第一個使容器能在不同機(jī)器之間移植的系統(tǒng)。

業(yè)內(nèi)甚至經(jīng)常出現(xiàn)一種聲音:Docker將取代VM。

9d5c163e-5cc9-11ee-939d-92fbcf53809c.png

不得不說,還是夸張了。

容器的優(yōu)勢在于是它使得業(yè)務(wù)的上云部署更快,資源利用更高。但是在安全性上,不好說。

今天就給你展開說說,到底什么是Docker容器?Docker容器和VM有什么區(qū)別?

01

為什么需要Docker容器?

01這就得先說回到虛擬機(jī)了

虛擬機(jī),也就是Virtual Machine,VM的發(fā)展,減輕了企業(yè)對硬件資源的依賴。

它將一臺物理設(shè)備虛擬為多個邏輯設(shè)備,每個邏輯設(shè)備可運(yùn)行不同的操作系統(tǒng),并且應(yīng)用程序都可以在相互獨(dú)立的空間內(nèi)運(yùn)行而互不影響,從而顯著提高設(shè)備的工作效率。

然而,傳統(tǒng)VM需要安裝操作系統(tǒng)才能執(zhí)行應(yīng)用程序,占用系統(tǒng)資源過多。

多數(shù)情況下,用戶只需要運(yùn)行簡單的應(yīng)用程序,采用VM技術(shù)操作繁瑣且造成資源浪費(fèi)。

假如需要遷移應(yīng)用服務(wù)程序,則需遷移整個VM,因此企業(yè)迫切需要輕量級的虛擬化技術(shù)。

02靈活遷移部署,簡直不要太香

容器,就是一種輕量級的虛擬化技術(shù),目的和虛擬機(jī)一樣,都是為了創(chuàng)造“隔離環(huán)境”。

但是它不像VM采用操作系統(tǒng)級的資源隔離,容器采用的是進(jìn)程級的系統(tǒng)隔離。

Docker作為創(chuàng)建容器的主流工具,為啥發(fā)展這么迅速?

關(guān)鍵點(diǎn)就在于它可以讓開發(fā)者將企業(yè)需要的各種應(yīng)用及應(yīng)用依賴文件封裝在Docker鏡像文件中。

然后在任何物理設(shè)備(Linux設(shè)備或Window設(shè)備等)上安裝運(yùn)行實(shí)現(xiàn)虛擬化;

讓應(yīng)用程序徹底脫離底層設(shè)備,可以在物理機(jī)之間靈活遷移部署,使運(yùn)維工程師擺脫了繁瑣的環(huán)境部署,極大的提高了工作效率,同時減少了部署過程中的潛在風(fēng)險。

03Docker容器的3大特點(diǎn)

輕量化:

一臺主機(jī)上運(yùn)行的多個Docker容器可以共享主機(jī)操作系統(tǒng)內(nèi)核;啟動迅速,只需占用很少的計算和內(nèi)存資源。

標(biāo)準(zhǔn)開放:

Docker容器基于開放式標(biāo)準(zhǔn),能夠在所有主流Linux版本、Microsoft Windows以及包括VM、裸機(jī)服務(wù)器和云在內(nèi)的任何基礎(chǔ)設(shè)施上運(yùn)行。

安全可靠:

Docker賦予應(yīng)用的隔離性不僅限于彼此隔離,還獨(dú)立于底層的基礎(chǔ)設(shè)施。

Docker默認(rèn)提供最強(qiáng)的隔離,因此應(yīng)用出現(xiàn)問題,也只是單個容器的問題,而不會波及到整臺主機(jī)。

02

Docker容器 VS VM

Docker容器和傳統(tǒng)VM技術(shù),在技術(shù)實(shí)現(xiàn)上有所不同。

01VM與Docker容器的邏輯組成

VM:

使用Hypervisor提供虛擬機(jī)的運(yùn)行平臺,管理每個VM中操作系統(tǒng)的運(yùn)行。

每個VM都要有自己的操作系統(tǒng)、應(yīng)用程序和必要的依賴文件等。

Docker容器:

使用Docker引擎進(jìn)行調(diào)度和隔離,提高了資源利用率,在相同硬件能力下可以運(yùn)行更多的容器實(shí)例;每個容器擁有自己的隔離化用戶空間。

9daa67b2-5cc9-11ee-939d-92fbcf53809c.png

02Docker容器的優(yōu)勢

相較于VM,Docker容器作為一種輕量級的虛擬化方式,在應(yīng)用方面具有以下顯著優(yōu)勢:

Docker容器可以在秒級時間內(nèi)快速啟動和停止,相較傳統(tǒng)虛擬機(jī)顯著提升。

Docker容器對系統(tǒng)資源要求低,數(shù)千個Docker容器可同時運(yùn)行在同一個主機(jī)上。

Docker容器通過類似Git的操作來方便用戶獲取和更新應(yīng)用鏡像。

Docker容器通過Dockerfile配置文件實(shí)現(xiàn)自動化創(chuàng)建和靈活部署,提高工作效率。

Docker容器除了運(yùn)行其中的應(yīng)用之外,基本不消耗額外的系統(tǒng)資源,保證應(yīng)用性能的同時,盡量減小系統(tǒng)開銷。

下圖可直觀了解Docker容器與傳統(tǒng)VM方式的區(qū)別:

9db2bf16-5cc9-11ee-939d-92fbcf53809c.png

03

Docker容器是如何工作的?

01Docker的三大組成要素

鏡像:

Docker鏡像是一個特殊的文件系統(tǒng),除了提供容器運(yùn)行時所需的程序、庫、資源、配置等文件外,還包含了一些為運(yùn)行時準(zhǔn)備的配置參數(shù)。

鏡像不包含任何動態(tài)數(shù)據(jù),其內(nèi)容在構(gòu)建之后也不會被改變。

鏡像可以用來創(chuàng)建Docker容器,用戶可以使用設(shè)備上已有的鏡像來安裝多個相同的Docker容器。

容器:

鏡像創(chuàng)建的運(yùn)行實(shí)例,Docker利用容器來運(yùn)行應(yīng)用。

每個容器都是相互隔離的、保證安全的平臺。

我們可以把容器看做是一個輕量級的Linux運(yùn)行環(huán)境。

鏡像倉庫:

集中存放鏡像文件的地方。

用戶創(chuàng)建完鏡像后,可以將其上傳到公共倉庫或者私有倉庫,需要在另一臺主機(jī)上使用該鏡像時,只需要從倉庫上下載即可。

02Docker容器的運(yùn)行邏輯

如下圖所示,Docker使用客戶端/服務(wù)器 (C/S) 架構(gòu)模式。

Docker守護(hù)進(jìn)程(Docker daemon)作為Server端接收Docker客戶端的請求,并負(fù)責(zé)創(chuàng)建、運(yùn)行和分發(fā)Docker容器。

Docker守護(hù)進(jìn)程一般在Docker主機(jī)后臺運(yùn)行,用戶使用Docker客戶端直接跟Docker守護(hù)進(jìn)程進(jìn)行信息交互。

9dbfeaec-5cc9-11ee-939d-92fbcf53809c.png

Docker運(yùn)行流程

接下來給你展開說說Docker的客戶端、主機(jī)和守護(hù)進(jìn)程。(根據(jù)上面這張圖來看哈)

1、Docker客戶端:

用于和Docker守護(hù)進(jìn)程(Docker Daemon)建立通信的客戶端。

Docker客戶端只需要向Docker服務(wù)器或者守護(hù)進(jìn)程發(fā)出請求(Docker構(gòu)建、Docker拉取和Docker啟動等指令),服務(wù)器或者守護(hù)進(jìn)程將完成所有工作并返回結(jié)果。

如橙色流程所示,執(zhí)行Docker構(gòu)建指令會根據(jù)Docker文件構(gòu)建一個鏡像存放于本地Docker主機(jī)。

如藍(lán)色流程所示,執(zhí)行Docker拉取指令會從云端鏡像倉庫拉取鏡像至本地Docker主機(jī)或?qū)⒈镜冂R像推送至遠(yuǎn)端鏡像倉庫。

如黑色流程所示,執(zhí)行Docker啟動指令會將鏡像安裝至容器并啟動容器。

2、Docker主機(jī):

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

3、Docker守護(hù)進(jìn)程:

接收并處理Docker客戶端發(fā)送的請求,監(jiān)測Docker API的請求和管理Docker對象,比如鏡像、容器、網(wǎng)絡(luò)和數(shù)據(jù)卷。

EC-IoT解決方案基于“邊緣智能+云化管理”平臺,物聯(lián)網(wǎng)關(guān)開放邊緣計算能力,快速適配不同行業(yè)邊緣智能數(shù)據(jù)處理需求。

實(shí)現(xiàn)關(guān)鍵業(yè)務(wù)本地毫秒級實(shí)時響應(yīng),完成數(shù)據(jù)本地聚合優(yōu)化,高價值數(shù)據(jù)主動回傳云端。

邊緣計算網(wǎng)關(guān)基于“硬件平臺化,業(yè)務(wù)APP化”的設(shè)計理念,終端功能由APP軟件定義,用戶基于基礎(chǔ)服務(wù)接口開發(fā)自定義APP,并實(shí)現(xiàn)在邊緣計算網(wǎng)關(guān)的靈活部署,快速適應(yīng)業(yè)務(wù)需求復(fù)雜多變的物聯(lián)場景。

邊緣計算網(wǎng)關(guān)支持部署Docker容器,用戶可在部署的容器上安裝自己的業(yè)務(wù)APP,同時網(wǎng)關(guān)設(shè)備提供各種eSDK接口供容器和APP調(diào)用其資源。

9dd2c504-5cc9-11ee-939d-92fbcf53809c.png

EC-IoT解決方案

9dda1f48-5cc9-11ee-939d-92fbcf53809c.png

網(wǎng)關(guān)開放性

04

容器的分類

容器技術(shù)架構(gòu)主流的有兩種:

01一種是Linux Container,即LXC

LXC起源于Linux內(nèi)核中的Cgroup和namespace的開發(fā),以支持輕量級虛擬化操作系統(tǒng)環(huán)境,是一種操作系統(tǒng)級別的輕量級Linux容器。

提供輕量級的虛擬化隔離進(jìn)程和資源:

它將應(yīng)用軟件系統(tǒng)打包成一個軟件容器,內(nèi)含應(yīng)用軟件本身的代碼,以及所需要的操作系統(tǒng)核心庫。

它通過統(tǒng)一的名字空間和共用API(Application Programming Interface,應(yīng)用程序編程接口)來分配不同軟件容器的硬件資源。

創(chuàng)造出應(yīng)用程序的獨(dú)立沙箱運(yùn)行環(huán)境,使得Linux用戶可以容易的創(chuàng)建和管理系統(tǒng)或應(yīng)用容器。

02一種是Docker公司發(fā)布的Docker

Docker是在LXC基礎(chǔ)上進(jìn)一步封裝的容器技術(shù)架構(gòu),它相當(dāng)與一個應(yīng)用程序級別的容器,也稱為APP容器。

9de3dc68-5cc9-11ee-939d-92fbcf53809c.png

即每個Docker容器是一個獨(dú)立的APP,Docker將APP打包成一個鏡像,在其它地方需要使用此APP時,直接獲取到此鏡像即可,方便部署與安裝。

如上圖所示,Docker與LXC實(shí)現(xiàn)容器都是通過Linux kernel的namespace與Cgroup機(jī)制實(shí)現(xiàn)。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)
    +關(guān)注

    關(guān)注

    4

    文章

    587

    瀏覽量

    27177
  • 虛擬機(jī)
    +關(guān)注

    關(guān)注

    1

    文章

    888

    瀏覽量

    27811
  • 裸機(jī)
    +關(guān)注

    關(guān)注

    0

    文章

    39

    瀏覽量

    6283
  • docker容器
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    3305
收藏 人收藏

    評論

    相關(guān)推薦

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    技術(shù),一個相同配置的主機(jī)往往可以運(yùn)行更多數(shù)量的應(yīng)用。 更快速的啟動時間:傳統(tǒng)的虛擬機(jī)技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,而Docker容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒
    發(fā)表于 07-25 14:36

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    ,一個相同配置的主機(jī)往往可以運(yùn)行更多數(shù)量的應(yīng)用。更快速的啟動時間:傳統(tǒng)的虛擬機(jī)技術(shù)啟動應(yīng)用服務(wù)往往需要數(shù)分鐘,而Docker容器應(yīng)用,由于直接運(yùn)行于宿主內(nèi)核,無需啟動完整的操作系統(tǒng),因此可以做到秒級
    發(fā)表于 07-17 11:05

    Docker容器技術(shù)的安裝和使用

    通過Docker,開發(fā)人員可以更容易地構(gòu)建、交付和運(yùn)行應(yīng)用程序,同時確保應(yīng)用程序的一致性和可移植性。它也使得應(yīng)用程序的部署更加靈活和高效,因為它可以快速地啟動、停止和擴(kuò)展容器,而不會影響其他容器或主機(jī)系統(tǒng)。
    發(fā)表于 04-16 11:24 ?229次閱讀
    <b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術(shù)的安裝和使用

    Docker容器實(shí)現(xiàn)開機(jī)自動啟動策略

    如果你的容器依賴于其他服務(wù)(例如數(shù)據(jù)庫或其他容器),你需要確保這些服務(wù)在你的容器啟動之前就已經(jīng)可用。這可以通過編排工具如Docker Com
    的頭像 發(fā)表于 03-11 10:33 ?2192次閱讀

    ARM平臺實(shí)現(xiàn)Docker容器技術(shù)

    什么是Docker? (1)Docker的架構(gòu) Docker是一個開源的應(yīng)用容器引擎,讓開發(fā)者可打包他們的應(yīng)用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的Linux或Windo
    的頭像 發(fā)表于 03-07 13:48 ?563次閱讀
    ARM平臺實(shí)現(xiàn)<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技術(shù)

    TLT507-Docker容器部署方法說明

    TLT507-Docker容器部署方法說明
    的頭像 發(fā)表于 01-26 09:49 ?357次閱讀
    TLT507-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    RK3568-Docker容器部署方法說明

    RK3568-Docker容器部署方法說明
    的頭像 發(fā)表于 01-22 10:12 ?1125次閱讀
    RK3568-<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>部署方法說明

    docker容器幾種狀態(tài)

    Docker 是一種流行的容器化平臺,它能夠幫助開發(fā)人員將應(yīng)用程序和其依賴打包成一個獨(dú)立的容器,并且能夠在不同的環(huán)境中進(jìn)行部署和運(yùn)行。在 Docker 中,
    的頭像 發(fā)表于 11-23 09:50 ?1773次閱讀

    docker核心組件哪些

    Docker 是一種開源的容器化平臺,它能夠?qū)崿F(xiàn)將應(yīng)用程序及其依賴項打包到一個可移植的容器中,從而實(shí)現(xiàn)快速、可重復(fù)、可擴(kuò)展的部署和管理。Docker 的核心組件包括
    的頭像 發(fā)表于 11-23 09:47 ?1467次閱讀

    docker進(jìn)入容器的方法哪些

    Docker是一種流行的容器化平臺,它能夠快速構(gòu)建、交付和運(yùn)行應(yīng)用程序。在使用Docker時,我們經(jīng)常需要進(jìn)入容器進(jìn)行調(diào)試、管理和運(yùn)行命令等
    的頭像 發(fā)表于 11-23 09:45 ?8896次閱讀

    Docker與虛擬機(jī)的區(qū)別

    Docker和虛擬機(jī)是兩種不同的虛擬化技術(shù),它們在實(shí)現(xiàn)方式、資源消耗、運(yùn)行性能等方面存在許多差異。本文將會詳細(xì)介紹它們的區(qū)別。 一、實(shí)現(xiàn)方式 1.1 虛擬機(jī) 虛擬機(jī)是通過在物理主機(jī)上模擬出多個獨(dú)立
    的頭像 發(fā)表于 11-23 09:37 ?6777次閱讀

    docker容器容器之間通信

    Docker容器之間的通信方式、通信過程以及常見的通信模式。 一、Docker容器之間的通信方式 在Docker中,
    的頭像 發(fā)表于 11-23 09:36 ?1234次閱讀

    docker容器刪除后數(shù)據(jù)還在嗎

    的數(shù)據(jù)是否還會保留,這是一個需要深入分析和理解的問題。 本文將詳細(xì)探討Docker容器刪除后數(shù)據(jù)的存儲機(jī)制,從容器使用的存儲驅(qū)動、數(shù)據(jù)卷、掛載以及網(wǎng)絡(luò)等方面進(jìn)行講解,以幫助讀者全面理解
    的頭像 發(fā)表于 11-23 09:32 ?1471次閱讀

    使用Docker容器編譯OK3568源代碼

    經(jīng)常編譯系統(tǒng),又免不了搭建各種開發(fā)環(huán)境,所以為了不對開發(fā)主機(jī)的環(huán)境有影響,使用Docker容器編譯代碼是比較方便和省心的方式。 編譯OK3568的源代碼,需要用Ubunut 18.04版本,我的開發(fā)
    發(fā)表于 10-19 10:36

    如何使用 Docker容器化技術(shù)

    對于開發(fā)人員來說,Docker肯定都不陌生,今天小編帶大家重新學(xué)習(xí)一下Docker。 什么是 Docker 官話: Docker 是一種開源的容器
    的頭像 發(fā)表于 09-30 11:24 ?1.6w次閱讀