Docker操作實踐(2):Docker的安裝及架構介紹
上篇我們分享了一下容器的演進,然後用程序隔離、檔案隔離、namespace、cgroups、libcontainer的幾個角度展開容器的本質,本篇文章會對Docker的版本安裝進行講解並簡介Docker的技術架構。
如果你還沒看過前面的內容:可以點選《容器的本質是什麼?容器從何而來?》
Docker版本
Docker在1.13之後,採用時間線作為版本號標識。Docker的版本分為社群版(CE)和企業版(EE)。企業版會提供額外的收費服務,比如包括一些經過官方認證的外掛、容器等。
社群版又分為三種版本:
穩定版本:stable。一般我們使用此版本。
預釋出版:test
待發布版:nightly
Docker安裝
1.解除安裝docker
解除安裝主機上已有的docker版本
2. 安裝前準備
配置yum
1. 安裝yum工具及devicemapper儲存驅動
2. 配置yum
yum makecache的過程中,可以看到可以安裝使用的包是dockerr-ce-stable版本,也就是repo中預設只開啟stable倉庫。
此時如果我們需要安裝test或nightly版本,可以使用yum-config-manger –enable docker-ce-test開啟此倉庫。
安裝docker
可以使用yum list檢視倉庫中docker的版本:
1. 安裝docker
2. 啟動docker
systemctl start docker
systemctl enable docker
3. 檢視docker版本
Docker映象下載Accelerator的配置
可配置阿里映象Accelerator,配置方法參考連結:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
針對docker客戶端版本大於1.10.0的,可通過修改/etc/docker/daemon.json檔案來使用Accelerator。
如果該檔案不存在,則直接建立。
操作命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["映象Accelerator地址(可從上面阿里雲連結地址中獲取)"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker架構
Docker採用了傳統的client-server架構模式,總架構圖如下:
使用者通過docker client與docker daemon建立通訊,並將請求傳送給後者。Docker daemon中的模組是鬆耦合結構,各模組各司其職並有機組合,完成使用者的請求。
API:用於接收docker client的請求,然後根據不同的請求分發給daemon的不同模組執行相關的工作。
Docker client:是一個泛稱,用來向指定的docker daemon發起請求。可以是docker命令列工具,也可以是任何遵循了docker api的客戶端。
Graph:作為容器映象的保管者。不論是docker下載的映象,還是docker構建的映象,都由graph統一管理。
Execdriver:是對linux作業系統的namespace、cgroups、apparmor、SELinux等容器執行所需的系統操作進行的一層二次封裝,其本質作用類似於LXC,但是功能要更全面。這也就是為什麼LXC會作為execdriver的一種實現而存在。不過目前,execdriver最主要的實現也是預設的實現是libcontainer庫
Networkdriver:對容器網路環境操作所進行的封裝。對於容器來說,網路裝置的配置相對比較獨立,並且應該允許使用者進行更多的配置,所以在docker中,這一部分是單獨作為一個driverr來設計和實現的。這些操作具體包括建立容器通訊所需的網路,這個網路所需的虛擬網上,分配通訊所需的IP,服務訪問的埠和容器與宿該機之間的埠對映,設定hosts、resolv.conf、iptables等。
Graphdriver:是所有與容器映象相關操作的最終執行者。包括從遠端docker registry上下載映象並進行儲存,也包括本地構建完映象後的儲存。當用戶下載指定的容器映象時,graphdriver將容器映象分層儲存在本地的指定目錄下;同時當用戶需要使用指定的容器映象來建立容器時,graphdriver從本地映象儲存目錄中獲取指定的容器鋁合金,並按特定規則為容器準備rootfs;另外,當用戶需要通過指定dockerfile構建全新映象時,graphdriver會負責新映象的儲存管理。目前graphdriver支援對接四種不同的檔案儲存:aufs、btrfs、vfs、devmapper。
Docker VS 虛擬機器
1. Docker與虛擬機器的架構對比
Docker架構與虛擬機器架構對比情況如下圖。最直觀的差別在於docker容器中是沒有獨立的os,而是與宿主機共用同一個核心。然後通過隔離技術,讓我們在進入每一個容器時,所看到的內容和操作的環境就像是在一個虛擬機器中一樣。
2. 容器與虛擬機器的優劣對比
容器與虛擬機器的對比情況如下:
在安全性上,虛擬機器肯定是比容器要好的,顯而易見,虛擬機器畢竟擁有著獨立的作業系統。
在計算資源開銷和映象大小對比上,容器優勢更大,從而實現了硬體資源的節約。
在啟動速度、快速擴充套件能力上,容器優勢更大,從而實現了容器化應用的快速部署/擴容,從而提高業務的敏捷性
在跨平臺遷移能力上,容器優勢更大,這對於容器化應用在企業的不同雲環境之間的遷移提供了非常大的便利性。
基於以上的種種優勢,容器實現了對微服務架構和devops的更好的支援。
作者:沈曉龍