Docker學習路線2:底層技術(shù)

了解驅(qū)動Docker的核心技術(shù)將讓您更深入地了解Docker的工作原理,并有助于您更有效地使用該平臺。
Linux容器(LXC)
Linux容器(LXC)是Docker的基礎(chǔ)。 LXC是一種輕量級的虛擬化解決方案,允許多個隔離的Linux系統(tǒng)在單個主機上運行,無需全功能的虛擬化。 LXC有效地以安全和優(yōu)化的方式隔離應(yīng)用程序及其依賴項。
控制組(cgroups)
控制組(cgroups)是Linux內(nèi)核的一個功能,允許分配和管理資源,例如CPU、內(nèi)存和I/O,到一組進程。 Docker利用cgroups來限制容器使用的資源,并確保一個容器不會壟斷主機系統(tǒng)的資源。
聯(lián)合文件系統(tǒng)(UnionFS)
UnionFS是一個文件系統(tǒng)服務(wù),允許在單個、統(tǒng)一的視圖中疊加多個文件系統(tǒng)。 Docker使用UnionFS為鏡像和容器創(chuàng)建分層方法,這使得共享公共文件和更快的容器創(chuàng)建成為可能。
命名空間
命名空間是另一個Linux內(nèi)核特性,提供進程隔離。它們允許Docker創(chuàng)建名為容器的隔離工作區(qū)。命名空間確保容器內(nèi)的進程不能干擾容器外或主機系統(tǒng)上的進程。有幾種類型的命名空間,如PID、NET、MNT和USER,每個命名空間負責隔離進程的不同方面。
命名空間
命名空間是 Docker 用于提供容器之間隔離的核心技術(shù)之一。在本節(jié)中,我們將簡要討論命名空間是什么以及它們?nèi)绾喂ぷ鳌?/p>
命名空間是什么?
在 Linux 內(nèi)核中,命名空間是一種功能,允許隔離各種系統(tǒng)資源,使得進程及其子進程能夠看到與其他進程分離的系統(tǒng)子集。命名空間有助于創(chuàng)建抽象層,將容器化的進程與彼此和主機系統(tǒng)分開。
Linux 中有幾種類型的命名空間,包括:
??**PID (進程 ID)**:隔離進程 ID 號碼空間,這意味著容器內(nèi)的進程只看到它們自己的進程,而不是主機或其他容器中的進程。
??**Network (NET)**:為每個容器提供網(wǎng)絡(luò)堆棧的單獨視圖,包括其自己的網(wǎng)絡(luò)接口、路由表和防火墻規(guī)則。
??**Mount (MNT)**:以這樣的方式隔離文件系統(tǒng)掛載點,以便每個容器都有自己的根文件系統(tǒng),并且掛載的資源僅出現(xiàn)在該容器內(nèi)。
??**UTS (UNIX Time Sharing System)**:允許每個容器擁有自己的主機名和域名,與其他容器和主機系統(tǒng)分開。
??**User (USER)**:在容器和主機之間映射用戶和組標識符,因此可以為容器內(nèi)的資源設(shè)置不同的權(quán)限。
??**IPC (進程間通信)**:允許或限制不同容器中的進程之間的通信。
Docker 如何使用命名空間
Docker 使用命名空間為容器創(chuàng)建隔離的環(huán)境。當容器啟動時,Docker 會為該容器創(chuàng)建一組新的命名空間。這些命名空間僅適用于容器內(nèi)部,因此在容器內(nèi)運行的任何進程都可以訪問一組與其他容器以及主機系統(tǒng)隔離的系統(tǒng)資源的子集。
通過利用命名空間,Docker 確保容器真正具有可移植性,可以在任何系統(tǒng)上運行,而不會與運行在同一主機上的其他進程或容器發(fā)生沖突或干擾。
總之,命名空間提供了一種資源隔離的級別,使得在同一主機上運行具有獨立系統(tǒng)資源的多個容器成為可能,而它們之間不會相互干擾。這是 Docker 容器技術(shù)的支柱性特征。
cgroups
cgroups或control groups是Linux內(nèi)核的一個功能,它允許您在運行系統(tǒng)上的進程組之間分配和管理資源,例如CPU、內(nèi)存、網(wǎng)絡(luò)帶寬和I/O。它在提供資源隔離和限制運行容器可以使用的資源方面發(fā)揮著至關(guān)重要的作用。
Docker利用cgroups對容器進行資源約束,從而使它們具有一致和可預測的行為。以下是cgroups在Docker容器上下文中的一些關(guān)鍵功能和優(yōu)點:
資源隔離
cgroups有助于將每個容器限制在特定的資源集上,確保多個容器之間公平共享系統(tǒng)資源。這可以在不同的容器之間實現(xiàn)更好的隔離,以便不良行為的容器不會消耗所有可用資源,從而對其他容器產(chǎn)生負面影響。
限制資源
使用cgroups,您可以設(shè)置容器使用的各種系統(tǒng)資源的限制,例如CPU、內(nèi)存和I/O。這有助于防止單個容器消耗過多的資源,從而對其他容器或主機系統(tǒng)造成性能問題。
優(yōu)先處理容器
通過分配不同的資源份額,cgroups允許您優(yōu)先或優(yōu)先處理某些容器。這在某些容器比其他容器更為關(guān)鍵或在高資源爭用情況下非常有用。
監(jiān)控
cgroups還提供監(jiān)視單個容器資源使用的機制,這有助于了解容器性能并識別潛在的資源瓶頸。
總的來說,cgroups是Docker的一個重要的基礎(chǔ)技術(shù)。通過利用cgroups,Docker提供了一個健壯和高效的容器運行時環(huán)境,確保容器具有所需的資源,同時保持良好的整體系統(tǒng)性能。
Docker引擎
“Docker Desktop”和“Docker引擎”之間經(jīng)常存在混淆。 Docker引擎專指Docker桌面組件的一個子集,它是免費且開源的,只能在Linux上安裝。
Docker引擎包括:
??Docker命令行界面(CLI)
??Docker守護進程(dockerd),公開Docker應(yīng)用程序編程接口(API)
Docker引擎可以構(gòu)建容器鏡像,從容器鏡像運行容器,并且通??梢詧?zhí)行Docker桌面的大多數(shù)操作,但它僅適用于Linux,并且不提供Docker桌面提供的所有開發(fā)人員體驗。
最后
為了方便其他設(shè)備和平臺的小伙伴觀看往期文章,鏈接奉上:
公眾號?Let us Coding
,牛客,知乎,開源中國,CSDN,思否,掘金,InfoQ,簡書,博客園,慕課,51CTO,helloworld,騰訊開發(fā)者社區(qū),阿里開發(fā)者社區(qū)
看完如果覺得有幫助,歡迎點贊、收藏和關(guān)注