docker基礎

wh50886發表於2020-10-03

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。

一個完整的Docker有以下幾個部分組成:

  1. docker Client客戶端
  2. Docker Daemon守護程式
  3. Docker Image映象
  4. Docker Container容器

 

Docker相關的核心技術之cgroups:

Linux系統中經常有個需求就是希望能限制某個或者某些程式進行資源分配。於是就出現了cgroups的概念,cgroups就是control group,在這個group中,有分配好的特定比例的cpu時間,IO時間,可用記憶體大小等。cgroups是將任意程式進行分組化管理的Linux核心功能。最初由google工程師提出,後來被整合進Linux核心中

 

cgroups中的重要概念是“子系統”,也就是資源控制器,每種子系統就是一個資源的分配器,比如cpu子系統是控制cpu時間分配。首先掛載子系統,然後才有control group的。比如先掛載memory子系統,然後在memory子系統中建立了一個cgroups節點,在這個節點中,將需要控制的程式id寫入,並且將控制的屬性寫入,這就是完成了記憶體的資源限制

 

cgroups被Linux核心支援,有得天獨厚的效能優勢,發展勢頭迅猛,在很多領域可以取代虛擬化技術分割資源,cgroups預設有諸多資源組,可以限制幾乎所有伺服器上的資源:cpu、mem、iops、iobangwide、net、device、acess等

 

Docker相關的核心技術之LXC:

LXC是Linux containers的簡稱,是一種基於容器的作業系統層級的虛擬化技術。藉助於namespace的隔離機制和cgroups限額功能,LXC提供了一套統一的API和工具來建立和管理container。LXC跟其他作業系統層級的虛擬化技術相比,最大的優勢在於LXC被整合進了Linux核心,不用單獨為核心打補丁

 

LXC旨在提供一個共享kernel的OS級虛擬化方法,在執行對不用重複載入kernel,且container的kernel與host共享,因此可以大大加快container的啟動過程,並顯著減少記憶體消耗,容器在提供隔離的同時,還通過共享這些資源節省開銷,這意味著容器比真正的虛擬化的開銷要小得多,在實際測試中,基於LXC的虛擬化方法的IO和CPU效能幾乎接近baremetal的效能

 

顯然容器所使用的這種型別的隔離總的來說非常強大,然後不是像執行在hypervisor上的虛擬化那麼強壯仍具有爭議性。如果核心停止,那麼所有的容器就會停止執行

效能方面:LXC>KVM>XEN(由於LXC使用cgroup機制,其效能損壞基本為0。)

記憶體利用率:LXC>KVM>XEN(LXC只能虛擬化linux。)

隔離程度:XEN>KVM>LXC(由於LXC共用核心,記憶體利用率最高;其他兩種方案每個虛機都需要單獨的作業系統佔用一部分記憶體空間。)

 

Docker相關的核心技術之AUFS:

AUFS是一個能透明覆蓋一個或多個現有檔案系統的層級檔案系統,支援將不同目錄掛載到同一個虛擬檔案系統下,可以把不同的目錄聯合在一起,組成一個單一的目錄。這種是一種虛擬的檔案系統,檔案系統不用格式化,直接掛載即可。

 

Docker一直在用AUFS作為容器的檔案系統。當一個程式需要修改一個檔案時,AUFS建立該檔案的一個副本。AUFS可以把多層合併成檔案系統的單層表示。這個過程稱為寫入複製(copy on write)

 

AUFS允許Docker把某些映象作為容器的基礎。例如,你可能有一個可以作為為很多不同容器的基礎的centos系統映象。多虧AUFS,只要一個centos映象的副本就夠了,這樣既節省了儲存和記憶體,也保證更快速的容器部署。

 

使用AUFS的另一個好處是Docker的版本容器映象能力。每個新版本都是一個與之版本的簡單差異改動,有效的保持映象檔案最小化。但這也意味著你總是要有一個記錄該容器從一個版本到另一個版本改動的審計跟蹤。

 

安裝docker,採用新增docker的repo:

1、安裝必要的包支援

# yum install -y yum-utils device-mapper-persistent-data lvm2

2、配置新增docker穩定版本倉庫

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3、安裝docker-ce

# yum install docker-ce

安裝docker-ce也就一個核心包docker-ce,外加一個依賴包

如果利用上述新增的docker源下載安裝速度緩慢,可以將docker-ce的包下載到本地進行安裝

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

如果安裝的系統存在之前的docker舊的版本,需要先將舊版本低額docker的包remove掉,然後刪掉資料目錄,預設的資料目錄/var/lib/docker

 

啟動docker服務:
# systemctl start docker
檢視啟動過程日誌:
# tail -f /var/log/messages |grep docker
校驗docker是否安裝成功,執行hello-world映象
# docker run hello-world
這條命令的執行過程:
1、先從本地檢視是否有這個映象
2、如果在本地沒有這個映象,那麼就從docker-hub上面進行拉取,並啟動container
 
還有一種安裝方式採用指令碼安裝:
# curl -fsSL get.docker.com -o get-docker.sh
# sh get-docker.sh(詳見官方文件)
將docker服務配置開機啟動:
# systemctl enable docker
解除安裝docker:
# yum remove docker-ce
# rm -rf /var/lib/docker

 

相關文章