docker 配置Btrfs和Device mapper儲存驅動設定

來源:互聯網
上載者:User

標籤:docker   btrfs   aufs   device mapper   

docker 配置Btrfs和Device mapper儲存驅動設定


運行環境:


docker -v

Docker version 1.12.1, build 23cf638


uname -a

Linux ceph-6-29 3.10.0-327.28.3.el7.x86_64 #1 SMP Thu Aug 18 19:05:49 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux\


一:docker 首次安裝完成,預設存放裝置為loop 迴環裝置,會建立一個100G的用於儲存資料,和一個2G的用於儲存中繼資料的疏鬆檔案,然後分別附加到迴環塊裝置/dev/loop0和/dev/loop1。然後基於迴環塊裝置建立thin pool。


1.1:查看迴環塊裝置資訊

[[email protected] ~]# losetup -a

/dev/loop0: [2245]:1937889 (/var/lib/docker/devicemapper/devicemapper/data)

/dev/loop1: [2245]:1937890 (/var/lib/docker/devicemapper/devicemapper/metadata)


1.2:查看迴環裝置大小


[[email protected] ~]# docker info

.。。。。。。。。。。。。。。。

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:197-537316283-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 10.74 GB《《=============data 預設塊大小

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 11.8 MB

 Data Space Total: 107.4 GB

 Data Space Available: 107.4 GB

 Metadata Space Used: 581.6 kB

 Metadata Space Total: 2.147 GB《《=============metadata 預設塊大小

 Metadata Space Available: 2.147 GB

 Thin Pool Minimum Free Space: 10.74 GB

 Udev Sync Supported: true


 從上的資訊可以看出,Base Device 只有10G 空間,我們測試期間發現,反覆發布鏡像,很容易把空間沾滿,如果你想增大空間執行操作如下:


1.3:關閉docker

systemctl stop docker



1.4:刪除docker目錄檔案,不刪除也可以,不過有時候可能會導致docker 服務服務啟動。

rm -rf /var/lib/docker/*


1.5:調整迴環裝置檔案和鏡像的大小,例如,我們將迴環境裝置檔案大小設定為100G,中繼資料檔案大小為4G,基礎鏡像大小為20G:

另外,–storage-opt還有其它一些參數,比較dm.fs指定檔案系統(預設為ext4)等。



vim /usr/lib/systemd/system/docker.service 


添加啟動項內容如下:

ExecStart=/usr/bin/dockerd --storage-opt dm.basesize=100G  dm.loopdatasize=50G --storage-opt dm.loopmetadatasize=4G

 

1.6:啟動docker服務

systemctl daemon-reload

systemctl start docker



1.7:在粗驗證docker配置資訊:


docker info

.。。。。。。。。。。。。。。

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:197-537315670-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 107.4    《《=============Base Device 預設塊大小

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 53.74 MB《《=============data 預設塊大小

 Data Space Total: 53.69 GB

 Data Space Available: 53.63 GB

 Metadata Space Used: 532.5 kB

 Metadata Space Total: 4.295     《《=============Metadata 預設塊大小

 Metadata Space Available: 4.294 GB

 Thin Pool Minimum Free Space: 5.369 GB


  1.8: 以上是直接修改配置調整儲存空間大小,驗證配置修改生效;


二:通過dd 建立儲存空間檔案方式調整儲存空間;


2.1:線上驗證docker配置資訊:


docker info

.。。。。。。。。。。。。。。

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:197-537315670-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 107.4    《《=============Base Device 預設塊大小

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 53.74 MB《《=============data 預設塊大小

 Data Space Total: 53.69 GB

 Data Space Available: 53.63 GB

 Metadata Space Used: 532.5 kB

 Metadata Space Total: 4.295     《《=============Metadata 預設塊大小

 Metadata Space Available: 4.294 GB

 Thin Pool Minimum Free Space: 5.369 GB



1.3:關閉docker

systemctl stop docker


1.4:刪除docker目錄檔案,不刪除也可以,不過有時候可能會導致docker 服務服務啟動。

rm -rf /var/lib/docker/*


1.5: 建立儲存空間檔案


建立目錄

mkdir -p /var/lib/docker/devicemapper/devicemapper

cd /var/lib/docker/devicemapper/devicemapper


Create your pool:

dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=80 

dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=4k count=0 seek=1024000 


1.6:驗證儲存空間大小

[[email protected] devicemapper]# ls -lsh         

total 0

0 -rw-r--r-- 1 root root  80G Sep 12 21:35 data

0 -rw-r--r-- 1 root root 4.0G Sep 12 21:36 metadata


1.7: 查看啟動服務組態檔:

vim /usr/lib/systemd/system/docker.service 


啟動項內容爆出預設即可:

ExecStart=/usr/bin/dockerd 

 

1.8:啟動docker服務

systemctl daemon-reload

systemctl start docker


1.9:驗證配置:


[[email protected] devicemapper]# docker info

Containers: 0

 Running: 0

 Paused: 0

 Stopped: 0

Images: 0

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:197-537315670-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 10.74   《《=============Base Device 預設塊大小

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 11.8 MB《《=============data 預設塊大小

 Data Space Total: 107.4 GB

 Data Space Available: 107.4 GB

 Metadata Space Used: 704.5 kB

 Metadata Space Total: 4.194   《《============= Metadata 預設塊大小

 Metadata Space Available: 4.194 GB

 Thin Pool Minimum Free Space: 10.74 GB

 Udev Sync Supported: true

2.0: 驗證查看info資訊,空間資訊沒有發生變化,這種配置方式,這種貌似不太靠譜,上面是在國外查詢資料時看到有人這麼做,僅供參考:


以上兩種方式的示範,基本對docker的儲存有所瞭解,但是以上方式都不推薦在生產環境使用,使用迴環裝置,效能差不說,也不太穩定,總是出一些奇葩的問題,我們深受其害,所有尋找資料總計梳理下面兩種配置docker 使用儲存空間的方式,現已經在生產系統測實驗證可靠性。

以下內容可能牽扯很多儲存相關的知識,請查詢相關資料,本文不做闡述,目前,Docker支援AUFS、Btrfs、Device mapper、OverlayFS、ZFS五種儲存驅動。就如Docker官網上說的,沒有單一的驅動適合所有的應用情境,要根據不同的情境選擇合適的儲存驅動,才能有效提高Docker的效能。


AUFS :最早的docker雖支援的儲存啟動,以補丁方式加入核心,問題比較多!AUFS能透明覆蓋一或多個現有檔案系統的層狀檔案系統,把多層合并成檔案系統的單層表示。


devicemapper:寫時複製(CoW)。CoW就是copy-on-write,表示只在需要寫時才去複製,這個是針對已有檔案的修改情境。


    Btrfs:btrfs驅動程式,docker build 非常快,-但是devicemapper 裝置之間不共用可執行記憶體。


    OverlayFS:是一個非常快的工會的檔案系統。它現在合并在主Linux核心作為3.18.0。


具體參考資訊如下:

https://docs.docker.com/engine/reference/commandline/dockerd/

http://dockone.io/article/1513


下面主要介紹如何快速簡單的配置使用btrfs 和  devicemapper  驅動;


三:使用裸裝置直接儲存docker 資料,即將真實磁碟連結到 docker data 儲存資料。


3.1:配置要求,


a:系統需要有一塊未使用的磁碟或分區;

b:掌握分區常用命令


3.2:查看系統磁碟分割資訊:

# lsblk 

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT

sda      8:0    0 558.4G  0 disk 

。。。。。。。。。。。。。。。。。。

├─sda4   8:4    0     1K  0 part 

├─sda5   8:5    0 355.9G  0 part /dbdata

├─sda6   8:6    0    80G  0 part 《=======本次示範使用分區

。。。。。。。。。。。。


3.3:修改前查看info資訊:

[[email protected] ~]# docker info

。。。。。。。。。。。。。。。。。。。。。

Images: 5

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:2-269225707-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 10.74 GB

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 1.944 GB

 Data Space Total: 107.4 GB

 Data Space Available: 98.49 GB

 Metadata Space Used: 2.834 MB

 Metadata Space Total: 2.147 GB

 Metadata Space Available: 2.145 GB

 Thin Pool Minimum Free Space: 10.74 GB


3.4:關閉docker

systemctl stop docker


3.5:刪除docker目錄檔案,不刪除也可以,不過有時候可能會導致docker 服務服務啟動。

rm -rf /var/lib/docker/*


3.6:系統磁碟分割;

我這邊要做的操作是使用 fdisk 刪除 /dev/sda6 分區,將剩餘空間重現劃分為兩個分區,資訊如下:


dm.datadev=/dev/sda6  ==>70G

dm.metadatadev=/dev/sda7  ==>10G


3.7:添加啟動項內容如下:


vim /usr/lib/systemd/system/docker.service 

修改啟動項如下:


ExecStart=/usr/bin/dockerd --storage-opt dm.datadev=/dev/sda6  --storage-opt dm.metadatadev=/dev/sda7 --storage-opt dm.blocksize=512K --storage-opt dm.basesize=80G 


3.8:啟動docker服務

systemctl daemon-reload

systemctl start docker


3.9:驗證修改效果:


[[email protected] docker]# docker info

。。。。。。。。。。。。。。。。

Images: 0

Server Version: 1.12.1

Storage Driver: devicemapper

 Pool Name: docker-8:2-403544979-pool

 Pool Blocksize: 524.3 kB

 Base Device Size: 85.9 GB《《=============儲存位置已變更

 Backing Filesystem: xfs

 Data file: /dev/sda6《《=============儲存位置已變更

 Metadata file: /dev/sda7《《=============儲存位置已變更

 Data Space Used: 79.17 MB

 Data Space Total: 85.9 GB

 Data Space Available: 85.82 GB

 Metadata Space Used: 737.3 kB

 Metadata Space Total: 10.74 GB

 Metadata Space Available: 10.74 GB

 Thin Pool Minimum Free Space: 8.59 GB


 通過以上配置,可以實現docker將資料存放區到裸裝置,原理上速度應該不錯,這種方式的缺點是,磁碟空間的使用量不好監控。有些人使用lvm 處理之後再這麼配置,然後添加配置 

 dockerd --storage-opt dm.min_free_space=10%  來保障空間使用方式,我測試了一下直接使用裸裝置,這個參數添加後docker 無法啟動。我覺得中間加一層lvm 的配置變得有些麻煩,就沒這麼做。


 四:配置使用btrfs 檔案系統;

 這種方式配置比較簡單,檔案系統掛載系統後再將docker 的資料寫入,系統後掛載點,系統監控可以監控磁碟空間,可以實現警示。


4.1:配置要求,


a:系統需要有一塊未使用的磁碟或分區;

b:掌握分區常用命令


 4.2:修改前docker info 資訊如下:


 Pool Name: docker-8:197-270105280-pool

 Pool Blocksize: 65.54 kB

 Base Device Size: 10.74 GB

 Backing Filesystem: xfs

 Data file: /dev/loop0

 Metadata file: /dev/loop1

 Data Space Used: 768.3 MB

 Data Space Total: 107.4 GB

 Data Space Available: 106.6 GB

 Metadata Space Used: 1.79 MB

 Metadata Space Total: 2.147 GB

 Metadata Space Available: 2.146 GB

 Thin Pool Minimum Free Space: 10.74 GB

 Udev Sync Supported: true


 4.3:查看系統磁碟分割資訊:


sdm      8:192  0 278.9G  0 disk 

├.......................

├─sdm2   8:194  0    80G  0 part 《=======本次示範使用分區

......................

[[email protected] ~]# 


4.4:格式檔案系統

安裝基礎包

yum  install btrfs-*


將 /dev/sdm2 格式化為btrfs 檔案系統:

mkfs.btrfs -f /dev/sdm2 



4.5:查看分區UUID ,為掛載做準備:

blkid 


/dev/sdm1: UUID="4f00e697-43a9-4088-9f47-363238ddd36c" TYPE="xfs" 

/dev/sdm2: UUID="15b78ce6-5ddd-42e3-a3e0-fd226e3dbd4a" UUID_SUB="66494e3f-4708-4376-a416-c769bfa96651" TYPE="btrfs" 


4.5:關閉docker

systemctl stop docker


4.6:刪除docker目錄檔案,不刪除也可以,不過有時候可能會導致docker 服務服務啟動。

rm -rf /var/lib/docker/*


4.7:添加系統開機自動掛載:

vim /etc/fstab


UUID=15b78ce6-5ddd-42e3-a3e0-fd226e3dbd4a /var/lib/docker         btrfs   defaults        0 0

 儲存退出後:

 執行 mount -a


查看系統磁碟分割掛載情況:


 [[email protected] ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

..............................

/dev/sdm2        80G  2.4G   77G   3% /var/lib/docker



4.8:添加啟動項內容如下:


Btrfs 配置選項 :btrfs.min_space  ,剩餘空間小於這個值,系統會給出警示資訊;


vim /usr/lib/systemd/system/docker.service 


ExecStart=/usr/bin/dockerd -s btrfs -g /var/lib/docker --storage-opt btrfs.min_space=10G


4.9:啟動docker服務

systemctl daemon-reload

systemctl start docker


4.10: 配置資訊驗證:


[[email protected] ~]# docker info

................

Server Version: 1.12.1

Storage Driver: Btrfs          <================儲存資訊

 Build Version: Btrfs v3.19.1

 Library Version: 101

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

 Volume: local

 Network: host bridge null overlay

Swarm: inactive

Runtimes: runc

Default Runtime: runc


 

 以上3-4 步驟介紹了配置Btrfs和Device mapper儲存驅動設定,不足之處各位看官指正。



參考文檔:


Docker五種儲存驅動原理及應用情境和效能測試對比:http://dockone.io/article/1513


Docker容器的持久儲存模式:http://dockone.io/article/1283

http://vitan.github.io/docker/2016/01/22/aufs-vs-devicemapper.html

http://www.cnblogs.com/itcomputer/p/5667917.html

https://github.com/snitm/docker/tree/master/daemon/graphdriver/devmapper


本文出自 “康建華” 部落格,轉載請與作者聯絡!

docker 配置Btrfs和Device mapper儲存驅動設定

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.