上篇咱們分享了一下容器的演進,而後用進程隔離、文件隔離、namespace、cgroups、libcontainer的幾個角度展開容器的本質,本篇文章會對Docker的版本安裝進行講解並簡介Docker的技術架構。linux
若是你還沒看過前面的內容:能夠點擊《容器的本質是什麼?容器從何而來?》sql
Docker在1.13以後,採用時間線做爲版本號標識。Docker的版本分爲社區版(CE)和企業版(EE)。企業版會提供額外的收費服務,好比包括一些通過官方認證的插件、容器等。docker
社區版又分爲三種版本:數據庫
穩定版本:stable。通常咱們使用此版本。json
預發佈版:testapi
待發布版:nightly安全
卸載主機上已有的docker版本網絡
配置yum架構
1. 安裝yum工具及devicemapper存儲驅動app
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版本
可配置阿里鏡像加速器,配置方法參考連接:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
針對docker客戶端版本大於1.10.0的,可經過修改/etc/docker/daemon.json文件來使用加速器。
若是該文件不存在,則直接建立。
操做命令:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["鏡像加速器地址(可從上面阿里雲連接地址中獲取)"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart 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架構與虛擬機架構對比狀況以下圖。最直觀的差異在於docker容器中是沒有獨立的os,而是與宿主機共用同一個內核。而後經過隔離技術,讓咱們在進入每個容器時,所看到的內容和操做的環境就像是在一個虛擬機中同樣。
容器與虛擬機的對比狀況以下:
在安全性上,虛擬機確定是比容器要好的,顯而易見,虛擬機畢竟擁有着獨立的操做系統。
在計算資源開銷和鏡像大小對比上,容器優點更大,從而實現了硬件資源的節約。
在啓動速度、快速擴展能力上,容器優點更大,從而實現了容器化應用的快速部署/擴容,從而提升業務的敏捷性
在跨平臺遷移能力上,容器優點更大,這對於容器化應用在企業的不一樣雲環境之間的遷移提供了很是大的便利性。
基於以上的種種優點,容器實現了對微服務架構和devops的更好的支持。
做者:沈曉龍