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