docker學習系列9 Docker的技術原理介紹

2021-09-19 19:21:34 字數 2390 閱讀 4593

以下內容是網上收集的:自己加了點備註。

docker相關的核心技術之cgroups

linux系統中經常有個需求就是希望能限制某個或者某些程序的分配資源。於是就出現了cgroups的概念,

cgroup就是controller group ,在這個group中,有分配好的特定比例的cpu時間,io時間,可用記憶體大小等。

cgroups是將任意程序進行分組化管理的linux核心功能。最初由google的工程師提出,後來被整合進linux內

核中。cgroups中的 重要概念是「子系統」,也就是資源控制器,每種子系統就是乙個資源的分配器,比如cpu子系

統是控制cpu時間分配的。首先掛載子系統,然後才有control group的。比如先掛載memory子系統,然後在

memory子系統中建立乙個cgroup節點,在這個節點中,將需要控制的程序id寫入,並且將控制的屬性寫入,

這就完成了記憶體的資源限制。

cgroups 被linux核心支援,有得天獨厚的效能優勢,發展勢頭迅猛。在很多領域可以取代虛擬化技術分割資源。

cgroup預設有諸多資源組,可以限制幾乎所有伺服器上的資源:cpu mem iops,iobandwide,net,device acess等。

docker相關的核心技術之lxc

lxc是linux containers的簡稱,是一種基於容器的作業系統層級的虛擬化技術。借助於namespace的隔離機制

和cgroup限額功能,lxc提供了一套統一的api和工具來建立和管理container。lxc跟其他作業系統層次的虛

擬化技術相比,最大的優勢在於lxc被整合進核心,不用單獨為核心打補丁

lxc 旨在提供乙個共享kernel的 os 級虛擬化方法,在執行時不用重複載入kernel, 且container的kernel與host

共享,因此可以大大加快 container 的啟動過程,並顯著減少記憶體消耗,容器在提供隔離的同時,還通過共享這

些資源節省開銷,這意味著容器比真正的虛擬化的開銷要小得多。 在實際測試中,基於lxc的虛擬化方法的io和

cpu效能幾乎接近 baremetal 的效能。

備註:最初實現是基於 lxc,從 0.7 版本以後開始去除 lxc,轉而使用自行開發的 libcontainer,從 1.11 開始,則進一步演進為使用 runc 和 containerd。

雖然容器所使用的這種型別的隔離總的來說非常強大,然而是不是像執行在hypervisor上的虛擬機器那麼強壯仍具有

爭議性。如果核心停止,那麼所有的容器就會停止執行。

• 效能方面:lxc>>kvm>>xen

• 記憶體利用率:lxc>>kvm>>xen

• 隔離程度: xen>>kvm>>lxc

備註:xen,kvm有些同學對這個名詞不會陌生,所謂虛擬主機,就是採用了這個技術,在一台物理主機上面,採用這種技術再劃分n多台虛擬主機去售賣。可以搜下kvm或xen虛擬主機。

docker相關的核心技術之aufs

什麼是aufs? aufs是乙個能透明覆蓋一或多個現有檔案系統的層狀檔案系統。 支援將不同目錄掛載到同一

個虛擬檔案系統下,可以把不同的目錄聯合在一起,組成乙個單一的目錄。這種是一種虛擬的檔案系統,文

件系統不用格式化,直接掛載即可。

docker 一直在用 aufs 作為容器的檔案系統(注意:目前好像不是這樣的)。當乙個程序需要修改乙個檔案時,aufs 建立該檔案的乙個副本。

aufs 可以把多層合併成檔案系統的單層表示。這個過程稱為寫入複製( copy on write )。

aufs 允許docker把某些映象作為容器的基礎。例如,你可能有乙個可以作為很多不同容器的基礎的centos

系統映象。多虧 aufs,只要乙個centos映象的副本就夠了,這樣既節省了儲存和記憶體,也保證更快速的容

器部署。

使用aufs的另乙個好處是docker的版本容器映象能力。每個新版本都是乙個與之前版本的簡單差異改動,

有效地保持映象檔案最小化。但,這也意味著你總是要有乙個記錄該容器從乙個版本到另乙個版本改動的

審計跟蹤。

備註:簡單說docker是基於linux的虛擬化技術,又加入了image,dockerfile等概念。又整了個類似github的docker hub。等發展起來了自己的生態系統。docker本身提供的命令非常簡單,dockerfile,docker compose又便於學習及運用,這是docker火起來的一大原因。

docker 和傳統虛擬化方式的不同之處

傳統虛擬機器技術是虛擬出一套硬體後,在其上執行乙個完整作業系統,在該系統上再執行所需應用程序;而容器內的應用程序直接執行於宿主的核心,容器內沒有自己的核心,而且也沒有進行硬體虛擬。因此容器要比傳統虛擬機器更為輕便。

參考:

docker學習 centos安裝docker

1.更新yum源 yum update2.安裝依賴 3.設定yum源 使用ustc,也可以使用阿里雲的 yum config manager add repo4.安裝docker yum install y docker ce通過docker v檢視,如果檢視到版本號,說明安裝成功 5.設定ustc...

docker學習系列9 Docker的技術原理介紹

以下內容是網上收集的 自己加了點備註。docker相關的核心技術之cgroups linux系統中經常有個需求就是希望能限制某個或者某些程序的分配資源。於是就出現了cgroups的概念,cgroup就是controller group 在這個group中,有分配好的特定比例的cpu時間,io時間,可...

docker 系列 Dock高階知識點文章匯集

書籍 docker 從入門到精通 這可能是最為詳細的docker入門 總結 麥子學院的教程 將 springboot 打包進 docker spring 官方的教程 docker 部署 springboot 專案整合 redis 映象做訪問計數demo docker 容器使用者管理 預設情況下,容器...