本文章來(lái)源為《深入淺出Docker》(異步圖書(shū))痕囱,為讀書(shū)筆記。 讀文本章大概需要20分鐘推沸,主要是docker的環(huán)境配置和安裝教程输枯,官網(wǎng)上也有詳細(xì)的教程议泵,大家對(duì)照自己的操作系統(tǒng)看對(duì)應(yīng)的章節(jié),3.4節(jié)一般不太會(huì)使用到桃熄,感興趣的朋友可以看看先口。
有很多種方式和場(chǎng)景可以安裝Docker。Docker可以安裝在Windows瞳收、Mac碉京,當(dāng)然還有Linux之上。除此之外還可以在云上安裝螟深,也可以在個(gè)人筆記本電腦上安裝谐宙,諸如此類的例子有很多。除了前面提到的各種安裝場(chǎng)景之外界弧,讀者還可以選擇不同方式完成Docker安裝凡蜻,包括手工安裝、通過(guò)腳本方式安裝和通過(guò)向?qū)Х绞桨惭b等夹纫。安裝Docker的場(chǎng)景和方式簡(jiǎn)直是數(shù)不勝數(shù)咽瓷。
但是不要害怕设凹!上面提到的Docker的安裝其實(shí)都很簡(jiǎn)單舰讹。
本章主要介紹了幾種重要的安裝方式。
- 桌面安裝闪朱。
- Windows版Docker(Docker for Windows)月匣。
- Mac版Docker(Docker for Mac)钻洒。
- 服務(wù)器安裝。
- Linux锄开。
- Windows Server 2016素标。
- Docker引擎升級(jí)。
- Docker存儲(chǔ)驅(qū)動(dòng)的選擇萍悴。
3.1 Windows版Docker(DfW)
在了解Windows版Docker之前头遭,讀者首先要知道這是由Docker公司提供的一個(gè)產(chǎn)品。這意味著它易于下載癣诱,并且有一個(gè)很靈活的安裝器(installer)计维。Windows版Docker需要運(yùn)行在一個(gè)安裝了64位Windows 10操作系統(tǒng)的計(jì)算機(jī)上,通過(guò)啟動(dòng)一個(gè)獨(dú)立的引擎來(lái)提供Docker環(huán)境撕予。
其次鲫惶,讀者需要知曉Windows版Docker是一個(gè)社區(qū)版本(Community Edition,CE)的應(yīng)用实抡,并不是為生產(chǎn)環(huán)境設(shè)計(jì)的欠母。
最后,讀者還需要知道Windows版Docker在某些版本特性上可能是延后支持的吆寨。這是因?yàn)镈ocker公司對(duì)該產(chǎn)品的定位是穩(wěn)定性第一赏淌,新特性其次。
以上3點(diǎn)被添加到Windows版Docker這個(gè)安裝快捷簡(jiǎn)單啄清,但并不支持生產(chǎn)環(huán)境部署的產(chǎn)品當(dāng)中猜敢。
閑話少說(shuō),接下來(lái)請(qǐng)讀者跟隨本書(shū)一起了解一下如何安裝Windows版Docker盒延。
在安裝之前缩擂,Windows版Docker的環(huán)境有以下要求。
- Windows 10 Pro / Enterprise / Education(1607 Anniversary Update添寺、Build 14393或者更新的版本)胯盯。
- Windows必須是64位的版本。
- 需要啟用Windows操作系統(tǒng)中的Hyper-V和容器特性计露。
接下來(lái)的步驟會(huì)假設(shè)讀者的計(jì)算機(jī)已經(jīng)開(kāi)啟了BIOS設(shè)置中的硬件虛擬化支持博脑。如果沒(méi)有開(kāi)啟,讀者需要在機(jī)器上執(zhí)行下面的步驟票罐。
首先叉趣,讀者需要確認(rèn)在Windows 10操作系統(tǒng)中,Hyper-V
和容器特性
已安裝并且開(kāi)啟该押。
- (1)右鍵單擊Windows開(kāi)始按鈕并選擇“應(yīng)用和功能”頁(yè)面疗杉。
- (2)單擊“程序和功能”鏈接。
- (3)單擊“啟用或關(guān)閉Windows功能”蚕礼。
- (4)確認(rèn)Hyper-V和容器復(fù)選框已經(jīng)被勾選烟具,并單擊確定按鈕梢什。
按上述步驟操作完成后,會(huì)安裝并開(kāi)啟Hyper-V和容器特性朝聋,如圖3.1所示嗡午。讀者需要重啟操作系統(tǒng)。
圖3.1 開(kāi)啟Hyper-V和容器特性
其中冀痕,容器特性只有在summer 2016 Windows 10 Anniversary Update(build 14393)版本或更高版本上才能開(kāi)啟荔睹。
當(dāng)讀者完成Hyper-V和容器特性的安裝并重啟機(jī)器之后,就可以安裝Windows版Docker了言蛇。
(1)訪問(wèn)Docker的下載頁(yè)面应媚,并單擊其中的Download for Windows
按鈕。
(2)單擊后會(huì)跳轉(zhuǎn)到Docker商店猜极,需要讀者使用自己的Docker ID進(jìn)行登錄中姜。
(3)單擊任意Get Docker下載鏈接。Docker for Windows
分為穩(wěn)定版(Stable)和搶鮮版(Edge)跟伏。搶鮮版當(dāng)中包含一些新特性丢胚,但是可能不夠穩(wěn)定。單擊下載鏈接后受扳,會(huì)將名為Docker for Windows Installer.exe
的安裝包下載到默認(rèn)下載目錄携龟。
(4)找到上一步下載的安裝包并運(yùn)行即可。
以管理員身份運(yùn)行安裝向?qū)Э备撸凑仗崾疽徊揭徊酵瓿烧麄€(gè)安裝過(guò)程峡蟋。安裝完成后Docker會(huì)作為系統(tǒng)服務(wù)自動(dòng)啟動(dòng),并且在Windows的通知欄看到Docker的大鯨魚(yú)圖標(biāo)华望。
恭喜蕊蝗!到目前為止已經(jīng)成功完成Windows版Docker的安裝。
打開(kāi)命令行或者PowerShell界面赖舟,并嘗試執(zhí)行下面的命令蓬戚。
Client:
Version: 18.01.0-ce
API version: 1.35
Go version: go1.9.2
Git commit: 03596f5
Built: Wed Jan 10 20:05:55 2018
OS/Arch: windows/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.01.0-ce
API version: 1.35 (minimum version 1.12)
Go version: go1.9.2
Git commit: 03596f5
Built: Wed Jan 10 20:13:12 2018
OS/Arch: linux/amd64
Experimental: false
注意觀察命令輸出內(nèi)容,其中Server部分中的OS/Arch屬性展示了當(dāng)前的操作系統(tǒng)是linux/amd64宾抓。這是因?yàn)樵谀J(rèn)安裝方式中摹恨,Docker daemon是運(yùn)行在Hyper-V虛擬機(jī)中的一個(gè)輕量級(jí)Linux上的土辩。這種情況下诊霹,讀者只能在Windows版Docker上運(yùn)行Linux容器题诵。
如果讀者想要運(yùn)行原生Windows
容器(Native Windows Container),可以右擊Windows通知欄中的Docker鯨魚(yú)圖標(biāo)讲衫,并選擇“切換到Windows容器”缕棵。使用下面的命令也可以完成切換(進(jìn)入\ProgramFiles\Docker\Docker目錄下執(zhí)行)。
C:\Program Files\Docker\Docker> .\dockercli -SwitchDaemon
C:\> docker version
Client:
<Snip>
Server:
Engine:
Version: 18.01.0-ce
API version: 1.35 (minimum version 1.24)
Go version: go1.9.2
Git commit: 03596f5
Built: Wed Jan 10 20:20:36 2018
OS/Arch: windows/amd64
Experimental: true
3.2 Mac版Docker(DfM)
Mac版Docker也是由Docker公司提供的一個(gè)產(chǎn)品。讀者大可以放心使用Docker挥吵,而無(wú)須先成為一個(gè)內(nèi)核工程師重父,也不必通過(guò)很極客的方法將Docker安裝到Mac花椭。DfM的安裝方式特別簡(jiǎn)單忽匈。
Mac版Docker是由Docker公司基于社區(qū)版的Docker提供的一個(gè)產(chǎn)品。這意味著在筆記本上安裝單引擎版本的Docker是非常簡(jiǎn)單的矿辽。但是同時(shí)丹允,這也意味著Mac版Docker并不是為生產(chǎn)環(huán)境而設(shè)計(jì)的。如果讀者聽(tīng)說(shuō)過(guò)boot2docker袋倔,那么Mac版Docker就是一個(gè)流暢雕蔽、簡(jiǎn)單并且穩(wěn)定版的boot2docker。
對(duì)于Mac版Docker來(lái)說(shuō)宾娜,提供基于Mac原生操作系統(tǒng)中Darwin內(nèi)核的Docker引擎沒(méi)有什么意義批狐。所以在Mac版Docker當(dāng)中,Docker daemon是運(yùn)行在一個(gè)輕量級(jí)的Linux VM之上的前塔。Mac版Docker通過(guò)對(duì)外提供daemon和API的方式與Mac環(huán)境實(shí)現(xiàn)無(wú)縫集成嚣艇。這意味著讀者可以在Mac上打開(kāi)終端并直接使用Docker命令。
盡管在Mac上實(shí)現(xiàn)了無(wú)縫集成华弓,還是要謹(jǐn)記Mac版Docker底層是基于Linux VM運(yùn)行的食零,所以說(shuō)Mac版Docker只能運(yùn)行基于Linux的Docker容器。不過(guò)這樣已經(jīng)很好了寂屏,因?yàn)榇蟛糠秩萜鲗?shí)際上都是基于Linux的贰谣。
圖3.3展示了Mac版Docker的抽象架構(gòu)。
接下來(lái)開(kāi)始安裝Mac版Docker迁霎。
- (1)打開(kāi)瀏覽器吱抚,訪問(wèn)Docker的下載頁(yè)面,然后單擊Download for Mac按鈕考廉。
- (2)頁(yè)面會(huì)跳轉(zhuǎn)到Docker商店频伤,需要讀者使用自己的
Docker ID和密碼
進(jìn)行登錄。 - (3)單擊下載鏈接Get Docker CE芝此。Mac版Docker分為兩個(gè)版本:
穩(wěn)定版(Stable)
和搶鮮版(Edge)
憋肖。搶鮮版包含一些新特性,但是并不保證穩(wěn)定運(yùn)行婚苹。單擊鏈接后岸更,會(huì)下載Docker.dmg安裝包。 - (4)運(yùn)行上一步中下載的
Docker.dmg
文件膊升。將代表Docker的鯨魚(yú)圖標(biāo)拖拽到應(yīng)用文件夾(Application folder)中怎炊。 - (5)打開(kāi)應(yīng)用文件夾(可能會(huì)自動(dòng)打開(kāi))并且雙擊Docker應(yīng)用圖標(biāo)來(lái)啟動(dòng)Docker。讀者可能需要確認(rèn)是否運(yùn)行,因?yàn)檫@是從互聯(lián)網(wǎng)下載的應(yīng)用程序评肆。
- (6)輸入Mac用戶密碼债查,這樣安裝程序可以獲取到創(chuàng)建組件所需的權(quán)限。
- (7)
Docker daemon
進(jìn)程啟動(dòng)瓜挽。
一個(gè)活動(dòng)的鯨魚(yú)圖標(biāo)會(huì)在屏幕上方狀態(tài)欄中出現(xiàn)盹廷。一旦Docker成功運(yùn)行,鯨魚(yú)圖標(biāo)就靜止了久橙。讀者可以單擊鯨魚(yú)圖標(biāo)來(lái)管理DfM俄占。
DfM現(xiàn)在已經(jīng)安裝完成,讀者可以打開(kāi)一個(gè)終端淆衷,并運(yùn)行一些常用的Docker指令缸榄。嘗試運(yùn)行下面的命令。
$ docker version
Client:
Version: 17.05.0-ce
API version: 1.29
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 21:43:09 2017
OS/Arch: darwin/amd64
Server:
Version: 17.05.0-ce
API version: 1.29 (minimum version 1.12)
Go version: go1.7.5
Git commit: 89658be
Built: Thu May 4 21:43:09 2017
OS/Arch: linux/amd64
Experimental: true
注意祝拯,Server的OS/Arch
屬性中顯示的值是linux/amd64
甚带。這是因?yàn)閐aemon是基于前文提到過(guò)的Linux VM
運(yùn)行的。Client組件是原生的Mac應(yīng)用佳头,運(yùn)行在Mac操作系統(tǒng)Darwin內(nèi)核之上(OS/Arch: darwin/amd64
)鹰贵。
除此之外,還需要注意當(dāng)前Docker版本是一個(gè)實(shí)驗(yàn)性質(zhì)的版本(Experimental: true)畜晰。這是因?yàn)樗菗岝r版砾莱,搶鮮版中開(kāi)啟了一些實(shí)驗(yàn)特性。
運(yùn)行其他Docker命令凄鼻。
$ docker --version
Docker version 17.05.0-ce, build 89658be
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3.3 在Linux上安裝Docker
在Linux上安裝Docker是常見(jiàn)的安裝場(chǎng)景腊瑟,并且安裝過(guò)程非常簡(jiǎn)單。通常難點(diǎn)在于Linux不同發(fā)行版之間的輕微區(qū)別块蚌,比如Ubuntu和CentOS之間的差異闰非。本書(shū)接下來(lái)的示例基于Ubuntu版本Linux,同樣適用于更低或者更高的版本峭范。理論上财松,下面的示例在CentOS的各種版本上也是可以執(zhí)行的。至于讀者的Linux操作系統(tǒng)是安裝在自己的數(shù)據(jù)中心纱控,還是第三方公有云辆毡,或是筆記本的虛擬機(jī)上,都沒(méi)有任何的區(qū)別甜害。唯一需求就是這臺(tái)機(jī)器是Linux操作系統(tǒng)舶掖,并且能夠訪問(wèn)https://get.docker.com。
下面的例子使用wget命令來(lái)運(yùn)行一個(gè)Shell腳本尔店,完成Docker CE的安裝眨攘。更多其他在Linux上安裝Docker的方式主慰,可以打開(kāi)Docker主頁(yè)面,單擊頁(yè)面中Get Started按鈕來(lái)獲取鲫售。
(1)在Linux機(jī)器上打開(kāi)一個(gè)新的Shell共螺。
(2)使用wget從https://get.docker.com獲取并運(yùn)行Docker安裝腳本,然后采用Shell中管道(pipe)的方式來(lái)執(zhí)行這個(gè)腳本情竹。
$ wget -qO- https://get.docker.com/ | sh
modprobe: FATAL: Module aufs not found /lib/modules/4.4.0-36-generic
+ sh -c 'sleep 3; yum -y -q install docker-engine'
<Snip>
If you would like to use Docker as a non-root user, you should
now consider adding your user to the "docker" group with
something like:
sudo usermod -aG docker your-user
Remember that you will have to log out and back in...
(3)最好通過(guò)非root用戶來(lái)使用Docker藐不。這時(shí)需要添加非root用戶到本地Docker Unix組當(dāng)中。下面的命令展示了如何把名為npoulton的用戶添加到Docker組中鲤妥,以及如何確認(rèn)操作是否執(zhí)行成功佳吞。請(qǐng)讀者自行使用系統(tǒng)中的有效用戶拱雏。
$ sudo usermod -aG docker npoulton
$ cat /etc/group | grep docker
docker:x:999:npoulton
如果讀者當(dāng)前登錄用戶就是要添加到Docker組中的用戶的話棉安,則需要重新登錄,組權(quán)限設(shè)置才會(huì)生效铸抑。
恭喜贡耽!Docker已經(jīng)在讀者的Linux機(jī)器上安裝成功。運(yùn)行下面命令來(lái)確認(rèn)安裝結(jié)果鹊汛。
$ docker --version
Docker version 18.01.0-ce, build 03596f5
$ docker system info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 18.01.0-ce
Storage Driver: overlay2
Backing Filesystem: extfs
<Snip>
如果上述步驟在讀者自己的Linux發(fā)行版中無(wú)法成功執(zhí)行蒲赂,可以訪問(wèn)Docker Docs網(wǎng)站并單擊與自己的版本相關(guān)的那個(gè)鏈接。接下來(lái)頁(yè)面會(huì)跳轉(zhuǎn)到Docker官方提供的適合當(dāng)前版本的安裝指南頁(yè)面刁憋,這個(gè)安裝指南通常會(huì)保持更新滥嘴。但是需要注意,Docker網(wǎng)站上提供的指令使用了包管理器至耻,相比本書(shū)前面的例子需要更多的步驟才能完成安裝操作若皱。實(shí)際上,如果讀者使用瀏覽器打開(kāi)網(wǎng)頁(yè)https://get.docker.com尘颓,會(huì)發(fā)現(xiàn)這其實(shí)就是一個(gè)Shell腳本走触,腳本中已經(jīng)幫讀者定義好了安裝相關(guān)的指令,包括設(shè)置Docker為系統(tǒng)開(kāi)啟自啟動(dòng)疤苹。
3.4 Docker存儲(chǔ)驅(qū)動(dòng)的選擇
每個(gè)Docker容器都有一個(gè)本地存儲(chǔ)空間互广,用于保存層疊的鏡像層(Image Layer)以及掛載的容器文件系統(tǒng)。默認(rèn)情況下卧土,容器的所有讀寫操作都發(fā)生在其鏡像層上或掛載的文件系統(tǒng)中惫皱,所以存儲(chǔ)是每個(gè)容器的性能和穩(wěn)定性不可或缺的一個(gè)環(huán)節(jié)。
以往尤莺,本地存儲(chǔ)是通過(guò)存儲(chǔ)驅(qū)動(dòng)(Storage Driver)進(jìn)行管理的旅敷,有時(shí)候也被稱為Graph Driver或者 GraphDriver。雖然存儲(chǔ)驅(qū)動(dòng)在上層抽象設(shè)計(jì)中都采用了棧式鏡像層存儲(chǔ)和寫時(shí)復(fù)制
(Copy-on-Write)的設(shè)計(jì)思想缝裁,但是Docker在Linux底層支持幾種不同的存儲(chǔ)驅(qū)動(dòng)的具體實(shí)現(xiàn)扫皱,每一種實(shí)現(xiàn)方式都采用不同方法實(shí)現(xiàn)了鏡像層和寫時(shí)復(fù)制足绅。雖然底層實(shí)現(xiàn)的差異不影響用戶與Docker之間的交互,但是對(duì)Docker的性能和穩(wěn)定性至關(guān)重要韩脑。
在Linux上氢妈,Docker可選擇的一些存儲(chǔ)驅(qū)動(dòng)包括AUFS(最原始也是最老的)、Overlay2(可能是未來(lái)的最佳選擇)段多、Device Mapper首量、Btrfs和ZFS。Docker在Windows操作系統(tǒng)上只支持一種存儲(chǔ)驅(qū)動(dòng)进苍,即Windows Filter加缘。
存儲(chǔ)驅(qū)動(dòng)的選擇是節(jié)點(diǎn)級(jí)別的。這意味著每個(gè)Docker主機(jī)只能選擇一種存儲(chǔ)驅(qū)動(dòng)觉啊,而不能為每個(gè)容器選擇不同的存儲(chǔ)驅(qū)動(dòng)拣宏。在Linux上,讀者可以通過(guò)修改/etc/docker/daemon.json文件來(lái)修改存儲(chǔ)引擎配置杠人,修改完成之后需要重啟Docker才能夠生效勋乾。下面的代碼片段展示了如何將存儲(chǔ)驅(qū)動(dòng)設(shè)置為overlay2。
{
"storage-driver": "overlay2"
}
如果讀者修改了正在運(yùn)行Docker主機(jī)的存儲(chǔ)引擎類型嗡善,則現(xiàn)有的鏡像和容器在重啟之后將不可用辑莫,這是因?yàn)槊糠N存儲(chǔ)驅(qū)動(dòng)在主機(jī)上存儲(chǔ)鏡像層的位置是不同的(通常在/var/lib/docker/ <storage-driver>/...
目錄下)。修改了存儲(chǔ)驅(qū)動(dòng)的類型罩引,Docker就無(wú)法找到原有的鏡像和容器了各吨。切換到原來(lái)的存儲(chǔ)驅(qū)動(dòng),之前的鏡像和容器就可以繼續(xù)使用了袁铐。
如果讀者希望在切換存儲(chǔ)引擎之后還能夠繼續(xù)使用之前的鏡像和容器揭蜒,需要將鏡像保存為Docker格式,上傳到某個(gè)鏡像倉(cāng)庫(kù)昭躺,修改本地Docker存儲(chǔ)引擎并重啟忌锯,之后從鏡像倉(cāng)庫(kù)將鏡像拉取到本地,最后重啟容器领炫。
通過(guò)下面的命令來(lái)檢查Docker當(dāng)前的存儲(chǔ)驅(qū)動(dòng)類型偶垮。
$ docker system info
<Snip>
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
<Snip>
選擇存儲(chǔ)驅(qū)動(dòng)并正確地配置在Docker環(huán)境中是一件重要的事情,特別是在生產(chǎn)環(huán)境中帝洪。下面的清單可以作為一個(gè)參考指南似舵,幫助讀者選擇合適的存儲(chǔ)驅(qū)動(dòng)。但是葱峡,本書(shū)仍建議讀者參閱Docker官網(wǎng)上由Linux發(fā)行商提供的最新文檔來(lái)做出選擇砚哗。
- Red Hat Enterprise Linux:4.x版本內(nèi)核或更高版本 + Docker 17.06版本或更高版本,建議使用Overlay2砰奕。
- Red Hat Enterprise Linux:低版本內(nèi)核或低版本的Docker蛛芥,建議使用Device Mapper提鸟。
- Ubuntu Linux:4.x版本內(nèi)核或更高版本,建議使用Overlay2仅淑。
- Ubuntu Linux:更早的版本建議使用AUFS称勋。
- SUSE Linux Enterprise Server:Btrfs。
3.4.1 Device Mapper配置
大部分Linux存儲(chǔ)驅(qū)動(dòng)不需要或需要很少的配置涯竟。但是赡鲜,Device Mapper通常需要合理配置之后才能表現(xiàn)出良好的性能。
默認(rèn)情況下庐船,Device Mapper采用loopback mounted sparse file作為底層實(shí)現(xiàn)來(lái)為Docker提供存儲(chǔ)支持银酬。如果讀者需要的是開(kāi)箱即用并且對(duì)性能沒(méi)什么要求,那么這種方式是可行的筐钟。但這并不適用于生產(chǎn)環(huán)境揩瞪。實(shí)際上,默認(rèn)方式的性能很差盗棵,并不支持生產(chǎn)環(huán)境壮韭。
為了達(dá)到Device Mapper在生產(chǎn)環(huán)境中的最佳性能北发,讀者需要將底層實(shí)現(xiàn)修改為direct-lvm模式纹因。這種模式下通過(guò)使用基于裸塊設(shè)備(Raw Block Device)的LVM精簡(jiǎn)池(LVM thin pool)來(lái)獲取更好的性能。
在Docker 17.06以及更高的版本中可以配置direct-lvm作為存儲(chǔ)驅(qū)動(dòng)琳拨。但是在本書(shū)撰寫時(shí)瞭恰,該方式存在某種限制。其中最主要的一點(diǎn)是狱庇,這種方式只能配置一個(gè)塊設(shè)備惊畏,并且只有在第一次安裝后才能設(shè)置生效。未來(lái)可能會(huì)有改進(jìn)密任,但就目前情況來(lái)看配置單一塊設(shè)備這種方式在性能和可靠性上都有一定的風(fēng)險(xiǎn)颜启。
3.4.2 讓Docker自動(dòng)設(shè)置direct-lvm
下面的步驟會(huì)將Docker配置存儲(chǔ)驅(qū)動(dòng)為Device Mapper,并使用direct-lvm模式浪讳。
(1)將下面的存儲(chǔ)驅(qū)動(dòng)配置添加到/etc/docker/daemon.json當(dāng)中缰盏。
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device=/dev/xdf",
"dm.thinp_percent=95",
"dm.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20",
"dm.directlvm_device_force=false"
]
}
Device Mapper和LVM是很復(fù)雜的知識(shí)點(diǎn),并不在本書(shū)的討論范圍之內(nèi)淹遵。下面簡(jiǎn)單介紹一下各配置項(xiàng)的含義口猜。
dm.directlvm_device:設(shè)置了塊設(shè)備的位置。為了存儲(chǔ)的最佳性能以及可用性透揣,塊設(shè)備應(yīng)當(dāng)位于高性能存儲(chǔ)設(shè)備(如本地SSD)或者外部RAID存儲(chǔ)陣列之上济炎。
dm.thinp_percent=95:設(shè)置了鏡像和容器允許使用的最大存儲(chǔ)空間占比,默認(rèn)是95%辐真。
dm.thinp_metapercent:設(shè)置了元數(shù)據(jù)存儲(chǔ)(MetaData Storage)允許使用的存儲(chǔ)空間大小须尚。默認(rèn)是1%崖堤。
dm.thinp_autoextend_threshold:設(shè)置了LVM自動(dòng)擴(kuò)展精簡(jiǎn)池的閾值,默認(rèn)是80%耐床。
dm.thinp_autoextend_percent:表示當(dāng)觸發(fā)精簡(jiǎn)池(thin pool)自動(dòng)擴(kuò)容機(jī)制的時(shí)候倘感,擴(kuò)容的大小應(yīng)當(dāng)占現(xiàn)有空間的比例。
dm.directlvm_device_force:允許用戶決定是否將塊設(shè)備格式化為新的文件系統(tǒng)咙咽。
(2)重啟Docker老玛。
(3)確認(rèn)Docker已成功運(yùn)行,并且塊設(shè)備配置已被成功加載钧敞。
$ docker version
Client:
Version: 18.01.0-ce
<Snip>
Server:
Version: 18.01.0-ce
<Snip>
$ docker system info
<Snipped output only showing relevant data>
Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3 kB
Base Device Size: 25 GB
Backing Filesystem: xfs
Data file: << Would show a loop file if in loopback mode
Metadata file: << Would show a loop file if in loopback mode
Data Space Used: 1.9 GB
Data Space Total: 23.75 GB
Data Space Available: 21.5 GB
Metadata Space Used: 180.5 kB
Metadata Space Total: 250 MB
Metadata Space Available: 250 MB
即使Docker在direct-lvm模式下只能設(shè)置單一塊設(shè)備蜡豹,其性能也會(huì)顯著優(yōu)于loopback模式。
3.4.3 手動(dòng)配置Device Mapper的direct-lvm
完整介紹如何進(jìn)行Device Mapper direct-lvm的手動(dòng)配置已經(jīng)超越了本書(shū)的范疇溉苛,并且不同操作系統(tǒng)版本之下配置方式也不盡相同镜廉。但是,下面列出的內(nèi)容是讀者需要了解并在配置的時(shí)候仔細(xì)斟酌的愚战。
- 塊設(shè)備(Block Device):在使用direct-lvm模式的時(shí)候娇唯,讀者需要有可用的塊設(shè)備。這些塊設(shè)備應(yīng)該位于高性能的存儲(chǔ)設(shè)備之上寂玲,比如本地SSD或者外部高性能LUN存儲(chǔ)塔插。如果Docker環(huán)境部署在企業(yè)私有云(On-Premise)之上,那么外部LUN存儲(chǔ)可以使用FC拓哟、iSCSI想许,或者其他支持塊設(shè)備協(xié)議的存儲(chǔ)陣列。如果Docker環(huán)境部署在公有云之上断序,那么可以采用公有云廠商提供的任何高性能的塊設(shè)備(通沉魑疲基于SSD)。
- LVM配置:Docker的Device Mapper存儲(chǔ)驅(qū)動(dòng)底層利用LVM(Logical Volume Manager)來(lái)實(shí)現(xiàn)违诗,因此需要配置LVM所需的物理設(shè)備漱凝、卷組、邏輯卷和精簡(jiǎn)池诸迟。讀者應(yīng)當(dāng)使用專用的物理卷并將其配置在相同的卷組當(dāng)中茸炒。這個(gè)卷組不應(yīng)當(dāng)被Docker之外的工作負(fù)載所使用。此外還需要配置額外兩個(gè)邏輯卷亮蒋,分別用于存儲(chǔ)數(shù)據(jù)和源數(shù)據(jù)信息扣典。另外,要?jiǎng)?chuàng)建LVM配置文件慎玖、指定LVM自動(dòng)擴(kuò)容的觸發(fā)閾值贮尖,以及自動(dòng)擴(kuò)容的大小,并且為自動(dòng)擴(kuò)容配置相應(yīng)的監(jiān)控趁怔,保證自動(dòng)擴(kuò)容會(huì)被觸發(fā)湿硝。
- Docker配置:修改Docker配置文件之前要先保存原始文件(etc/docker/daemon.json)薪前,然后再進(jìn)行修改。讀者環(huán)境中的dm.thinpooldev配置項(xiàng)對(duì)應(yīng)值可能跟下面的示例內(nèi)容有所不同关斜,需要修改為合適的配置示括。
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
]
}
修改并保存配置后,讀者可以重啟Docker daemon痢畜。
如果想獲取更多細(xì)節(jié)信息垛膝,可以參考Docker文檔,或者咨詢Docker技術(shù)賬戶管理員丁稀。
3.5 本章小結(jié)
Docker在Linux和Windows中都是可用的吼拥,并且分為社區(qū)版(CE)和企業(yè)版(EE)。在本章中线衫,主要向讀者介紹了在Windows10凿可、Mac OS X、Linux以及Windows Server 2016下的幾種安裝Docker的方式授账。
本章還介紹了如何在Ubuntu 16.04和Windows Server 2016環(huán)境中升級(jí)Docker引擎枯跑,這也是兩種常見(jiàn)的配置場(chǎng)景。
本章中讀者還可以了解到選擇正確的存儲(chǔ)驅(qū)動(dòng)對(duì)于在Linux生產(chǎn)環(huán)境中使用Docker非常重要白热。
摘錄來(lái)自 深入淺出Docker(異步圖書(shū)) Nigel Poulton(奈吉爾·波爾頓)