Docker核心技術和安裝教程

Docker核心技術

Docker底層依賴的核心技術:包括Docker基本架構、Linux操作系統的命名空間(namespace)、控制組(control group)、聯合文件系統(union file system) 和虛擬化支持等。

Docker基本架構

Docker採用了標準的C/S架構,包括客戶端、服務端兩大核心組件,同時通過鏡像倉庫來存儲鏡像。客戶端和服務端可以運行在一個機器上,也可以通過socket或者RESTful API來進行通信。

1.服務端
Docker服務端一般在宿主主機後臺運行,dockerd作爲服務端接受來自客戶的請求,並通過containerd具體處理與容器相關的請求,包括創建、運行、刪除容器等。
服務端主要包括四個組件:
1)dockerd:爲客戶端提供RESTful API,響應來自客戶端的請求,採用模塊化的架構,通過專門的Engine模塊來分發管理各個來自客戶端的任務。
2)docker-proxy:dockerd的子進程,當需要進行容器端口映射時,docker-proxy完成網絡映射配置。
3)containerd:是dockerd的子進程,提供gRPC接口響應來自dockered的請求,對下管理runC鏡像和容器環境。
4) containerd-shim:是containerd的子進程,爲runC容器提供支持,同時作爲容器內進程的根進程。

2.客戶端
Docker客戶端爲用戶提供一系列可執行命令,使用這些命令可實現與Docker服務端交互。
用戶使用的Docker可執行命令即爲客戶端程序,客戶端發送命令後,等待服務端返回,一旦收到返回後,客戶端立刻執行結束並退出。用戶執行新的命令,需要再次調用客戶端命令。

3.鏡像倉庫
鏡像是使用容器的基礎,Docker使用鏡像倉庫(Registry)在大規模場景下存儲和分發的Docker鏡像。鏡像倉庫提供了對不同存儲後端的支持,存放鏡像文件,並且支持RESTful API,接收來自dockerd的命令,包括拉取、上傳鏡像等。

命名空間

要想實現虛擬化,要實現對內存、CPU、網絡IO、硬盤IO、存儲空間等限制,還要實現對文件系統、網絡、PID、UID、IPC等的相互隔離。
命名空間是Linux內核的一個強大特性,爲容器虛擬化的實現帶來極大便利,利用這一特性,每個容器都可以擁有自己單獨的命名空間,命名空間機制保證了容器之間彼此互不影響。
Docker容器每次啓動時候,通過調用func setNamespaces(daemon *Daemon,s *specs.Spec,c *container.Container) error方法來完成對各個命名空間的配置。

控制組

控制組(CGroups)是Linux內核的一個特性,主要用來對共享資源進行隔離、限制、審計等。只有將分配到容器的資源進行控制,才能避免多個容器同時運行時對宿主機系統的資源競爭。每個控制組是一組對資源的限制,支持層級化結構。

控制組提供如下功能:
1)資源限制:可將組設置一定的內存限制。
2)優先級:通過優先級讓一些組優先得到更多的CPU等資源。
3)資源審計:用來統計系統實際上把多少資源用到適合的目的上,可以使用cpuacct子系統記錄某個進程組使用的CPU時間。
4)執行掛起、恢復和重啓動等操作。
Docker容器每次啓動的時候,通過調用func setCapabilities(s *specs.Spec,c *container.Container) error方法來完成對各個命名空間的配置。

聯合文件系統

聯合文件系統是一種輕量級的高性能分層文件系統,支持將文件系統中的修改信息作爲一次提交,並層層疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下,應用看到的是掛載的最終結果。聯合文件系統是實現Docker鏡像的技術基礎。

1)Docker存儲原理
Docker鏡像可以通過分層來進行繼承。例如:用戶基於基礎鏡像來製作各種不同的應用鏡像。這些鏡像共享同一個基礎鏡像曾,提高了存儲效率。
Docker鏡像自身就是由多個文件層組成。可以通過docker history查看一個鏡像由哪些層組成。
對於Docker鏡像來說,這些層的內容都是不可修改的、只讀的,當Docker利用鏡像啓動一個容器時,將在鏡像文件系統的最頂端再掛載一個新的可讀寫的層給容器。容器中的內容更新將會發生在可讀寫層。對於IO敏感型應用,一般推薦將容器要修改的數據通過volume方式掛載,在宿主機上進行修改,而不是之間修改鏡像內數據。

2)Docker存儲結構
所有的鏡像和容器都存儲在Docker指定的存儲目錄下。

3)文件系統種類
Docker目前支持的聯合文件系統種類包括AUFS、Device Mapper。
Device Mapper::RedHat公司和Docker團隊一起開發用於支持RHEL的文件系統,內核支持,性能略慢,成熟度高。

Linux網絡虛擬化

Docker的本地網絡實現其實就是利用了Linux上的網絡命名空間和虛擬網絡設備。
要實現網絡通信,機器需要至少一個網絡接口(物理接口或虛擬接口)與外界相通,並可以收發數據包。
Docker中的網絡接口默認都是虛擬接口。虛擬接口的最大優勢就是轉發效率極高。這是因爲Linux通過在內核中進行數據複製來實現虛擬接口之間的數據轉發,即發送接口發送緩存中的數據包將被直接複製到接收接口的接收緩存中,而無需通過外部物理設備進行交換。
Docker容器網絡就很好地利用了Linux虛擬網絡技術,在本地主機和容器內分別創建一個虛擬接口veth,並連通。

Docker安裝教程

Docker提供了兩個版本:社區版(CE)和企業版(EE)。企業版收費,一般安裝社區版就能滿足需求。

操作系統要求
以Centos7爲例,Docker要求操作系統必須爲64位,且centos內核版本爲3.1及以上

查看內核版本信息

uname -r
3.10.0-514.el7.x86_64

一.準備工作

查看是否安裝過docker

yum list installed | grep docker
docker-ce.x86_64                 3:18.09.6-3.el7                installed
docker-ce-cli.x86_64             1:18.09.6-3.el7                installed

卸載docker舊版本

yum -y remove docker-ce.x86_64
yum -y remove docker-ce-cli.x86_64

卸載後將保留/var/lib/docker的內容(鏡像、容器、存儲卷和網絡等)

rm -rf /var/lib/docker

安裝依賴軟件包

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

二 在線安裝和離線安裝docker

1)在線安裝
查看系統內已經擁有的倉庫

yum repolist all

使用yum-config-manger --add-repo添加docker的yum倉庫
yum-config-manager命令在yum-utils包裏

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

更新yum軟件包索引

yum makecache fast

安裝指定版本的docker-ce,可以使用下面的命令查看docker-ce版本

# --showduplicates參數列出所有版本
# sort -r將數字當做字符進行排序
yum list docker-ce.x86_64 --showduplicates | sort -r

安裝docker-ce

yum install -y docker-ce
# 安裝完成後查看docker版本
docker version

2)離線安裝
下載rpm包離線安裝
在這裏插入圖片描述
1 安裝container-selinux
下載container-selinux-2.107-3.el7.noarch.rpm

rpm -ivh container-selinux-2.107-3.el7.noarch.rpm

在這裏插入圖片描述
2 安裝libseccomp
docker-ce依賴libseccomp,安裝docker-ce前先安裝libseccomp

#下載libseccomp的rpm包到指定目錄/moudle/temp/下
yumdownloader --resolve --destdir=/moudle/temp/ libseccomp-2.3.1-3.el7.x86_64
rpm -ivh libseccomp-2.3.1-3.el7.x86_64.rpm

在這裏插入圖片描述
3 安裝containerd.io,docker-ce-cli,docker-ce

下載最新版本的docker-ce和兩個依賴包containerd.io,docker-ce-cli
containerd.io-1.2.13-3.2.el7.x86_64.rpm
docker-ce-19.03.11-3.el7.x86_64.rpm
docker-ce-cli-19.03.11-3.el7.x86_64.rpm
docker下載地址
在這裏插入圖片描述

rpm -ivh containerd.io-1.2.13-3.2.el7.x86_64.rpm
rpm -ivh docker-ce-cli-19.03.11-3.el7.x86_64.rpm
rpm -ivh docker-ce-19.03.11-3.el7.x86_64.rpm

在這裏插入圖片描述
在這裏插入圖片描述

查看是否安裝成功

docker version

如下如所示,則安裝成功
在這裏插入圖片描述

啓動docker

systemctl enable docker
systemctl start docker
systemctl status docker

在這裏插入圖片描述
再次查看docker版本,發現已經同時具有客戶端、服務端了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章