您好,登錄后才能下訂單哦!
上篇我們分享了一下容器的演進,然后用進程隔離、文件隔離、namespace、cgroups、libcontainer的幾個角度展開容器的本質,本篇文章會對Docker的版本安裝進行講解并簡介Docker的技術架構。
如果你還沒看過前面的內容:可以點擊《容器的本質是什么?容器從何而來?》
Docker在1.13之后,采用時間線作為版本號標識。Docker的版本分為社區版(CE)和企業版(EE)。企業版會提供額外的收費服務,比如包括一些經過官方認證的插件、容器等。
社區版又分為三種版本:
穩定版本:stable。一般我們使用此版本。
預發布版:test
待發布版:nightly
卸載主機上已有的docker版本
配置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版本
可配置阿里鏡像加速器,配置方法參考鏈接:
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的更好的支持。
作者:沈曉龍
容器的本質是什么?容器從何而來?
使用sqlplus進行Oracle數據庫批量自動發布
業務復雜、數據龐大、應用廣怎辦?了解下分布式事務的解決思路!
這里有份選擇云服務商的攻略,請查收…
SaaS設計:自動化服務啟停設計示例?
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。