第3章 Docker安裝

本文章來(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和容器特性

圖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)。

image.png

接下來(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(奈吉爾·波爾頓)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末敛助,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棘捣,更是在濱河造成了極大的恐慌辜腺,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乍恐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡测砂,警方通過(guò)查閱死者的電腦和手機(jī)茵烈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)砌些,“玉大人呜投,你說(shuō)我怎么就攤上這事〈媪В” “怎么了仑荐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)纵东。 經(jīng)常有香客問(wèn)我粘招,道長(zhǎng),這世上最難降的妖魔是什么偎球? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任洒扎,我火速辦了婚禮辑甜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袍冷。我一直安慰自己磷醋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布胡诗。 她就那樣靜靜地躺著邓线,像睡著了一般。 火紅的嫁衣襯著肌膚如雪煌恢。 梳的紋絲不亂的頭發(fā)上褂痰,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音症虑,去河邊找鬼缩歪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谍憔,可吹牛的內(nèi)容都是我干的匪蝙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼习贫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逛球!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起苫昌,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颤绕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后祟身,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奥务,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年袜硫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氯葬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡婉陷,死狀恐怖帚称,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秽澳,我是刑警寧澤闯睹,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站担神,受9級(jí)特大地震影響楼吃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一所刀、第九天 我趴在偏房一處隱蔽的房頂上張望衙荐。 院中可真熱鬧,春花似錦浮创、人聲如沸忧吟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溜族。三九已至,卻和暖如春垦沉,著一層夾襖步出監(jiān)牢的瞬間煌抒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工厕倍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寡壮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓讹弯,卻偏偏與公主長(zhǎng)得像况既,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子组民,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容