修改CentOs7 上Docker預設檔案系統DeviceMapper為OverlayFS

來源:互聯網
上載者:User

標籤:docker   aufs   devicemapper   overlayfs   

最近一直在研究Mesos, Marathon跟Docker結合的容器雲平台,Mesos 架構已經搭好,並且Marathon也可以實現簡單的Docker應用管理了,然後今天嘗試搭建一下mesosphere公司的DC/OS平台(https://dcos.io/),利用這個平台可以很容易實現基於容器的雲端運算平台的資源調度,管理,應用程式指派,負載平衡,動態擴充,容錯移轉等。DC/OS底層系統也是基於Docker的,根據官方文檔建議,我們把CentOS7系統上Docker預設的檔案系統DeviceMapper改為OverlayFS。

Docker最開始支援的檔案系統是Aufs的,是一種Union File System,原理就是將多個目錄掛在到同一個虛擬目錄下,整個檔案系統是一個分層的概念,請看圖:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/82/09/wKiom1dIIWXAoDIbAAJ5OoZjH4s479.png" title="0328091.png" width="450" height="338" border="0" hspace="0" vspace="0" style="width:450px;height:338px;" alt="wKiom1dIIWXAoDIbAAJ5OoZjH4s479.png" />

然後RedHat系列的系統是不支援Aufs的,當Docker變得越來越流行的時候,RedHat公司發行我也得插一腳進去,然後RedHat公司就對這個Aufs研究了一下,然後說“恩,我們牛逼,我要開發一套新的檔案系統用來運行Docker”。後來這套系統就是基於自家的在kernel2.6之後被引進的DeviceMapper技術。主要用到Docker上的就是Snapshot和Thinly-provisioned Snapshot, 這個Snapshot在LVM邏輯卷管理情境下用來建立虛擬快照的,Thin-Provisioning是一項利用虛擬化方法減少實體儲存體部署的技術,可最大限度提升儲存空間利用率。當這兩個技術結合起來就是DeviceMapper給RedHat系統實現Docker檔案系統的最後方案了。其實這個方案也是基於分層的理論給每一層鏡像建立快照。

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/82/08/wKioL1dIJdHwqFDHAAD_qU7DrCc141.jpg" title="two_dm_container.jpg" alt="wKioL1dIJdHwqFDHAAD_qU7DrCc141.jpg" />

然而DeviceMapper的效能並不是那麼的好,DC/OS官網給出的解釋是會出現unknown issue並且不能再Docker裡面運行Docker,DeviceMapper預設情況下建立loop-lvm的方式來構建鏡像和容器的snapshots。但是在生產環境下Docker官方建議採用直連的lvm捲來構建鏡像和容器,然後在啟動Docker Daemon的時候使用如下方式來載入:

{     "storage-driver": "devicemapper",     "storage-opts": [         "dm.thinpooldev=/dev/mapper/docker-thinpool",         "dm.use_deferred_removal=true"     ] }

在系統裡運行docker info即可查看到使用的是什麼檔案系統:

這是Cent6.5系統的,發現使用的是devicemapper,而且Data File是loop0:


# docker infoContainers: 11Images: 63Storage Driver: devicemapper Pool Name: docker-252:1-679218-pool Pool Blocksize: 65.54 kB Backing Filesystem: extfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 2.221 GB Data Space Total: 107.4 GB Data Space Available: 9.648 GB Metadata Space Used: 4.166 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.143 GB Udev Sync Supported: true Deferred Removal Enabled: false Data loop file: /var/lib/docker/devicemapper/devicemapper/data Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.95-RHEL6 (2015-09-08)Execution Driver: native-0.2Logging Driver: json-fileKernel Version: 2.6.32-573.22.1.el6.x86_64Operating System: <unknown>CPUs: 2Total Memory: 2.819 GiBName: bastion.shankerID: SJVK:KAXO:ZDAB:XWSM:O45I:EF6U:GE2T:RU3Y:NW6B:K4IQ:DYEN:B4BJ


這台是Ubuntu12.04的,使用的Aufs系統:


# docker infoContainers: 1 Running: 0 Paused: 0 Stopped: 1Images: 38Server Version: 1.10.3Storage Driver: aufs Root Dir: /var/lib/docker/aufs Backing Filesystem: extfs Dirs: 101 Dirperm1 Supported: falseExecution Driver: native-0.2Logging Driver: json-filePlugins:  Volume: local Network: host bridge nullKernel Version: 3.13.0-24-genericOperating System: Ubuntu 14.04.1 LTSOSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 1.463 GiBName: dbslave.shankerID: IDR4:IA4B:3GDE:O6KF:IACI:BQE2:5SJL:25CA:4KV3:OCIG:RGYC:N22GUsername: shankerRegistry: https://index.docker.io/v1/WARNING: No swap limit support


這台是CentOS7.2系統,使用的是我更改後的OverlayFS系統:


# docker infoContainers: 3 Running: 0 Paused: 0 Stopped: 3Images: 5Server Version: 1.11.1Storage Driver: overlay Backing Filesystem: xfsLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:  Volume: local Network: bridge null hostKernel Version: 3.10.0-327.18.2.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 1Total Memory: 3.703 GiBName: ukcent2.novalocalID: 7Q46:GGPP:HOLP:5ICX:WXV7:ZC73:S45I:HVC2:UEWX:FL6L:DMSC:TVYHDocker Root Dir: /var/lib/dockerDebug mode (client): falseDebug mode (server): falseRegistry: https://index.docker.io/v1/

然後我們今天要做的是放棄DeviceMapper,使用OverlayFS來作為預設的儲存系統。首先要升級到CentOS7.2,有一個XFS的Bug在7.2系統被修複了。


1.    將OverlayFS加到module目錄下

echo "overlay" > /etc/modules-load.d/overlay.conf


2.    reboot 系統,執行lsmod看時候看到overlay

# lsmod | grep overoverlay                42451  0


3.    將Docker源添加到系統裡

cat >/etc/yum.repos.d/docker.repo<<E[dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpgE


4.    配置Docker Daemon用OverlayFS啟動

sudo mkdir -p /etc/systemd/system/docker.service.dsudo cat >/etc/systemd/system/docker.service.d/override.conf <<E[Service] ExecStart= ExecStart=/usr/bin/docker daemon --storage-driver=overlay -H fd:// E


5.    安裝Docker,設定開機自啟動

sudo yum -y install docker-enginesudo sysctemctl start dockersudo systemctl enable docker


6.    Docker info 看一下,如果看到

Storage Driver: overlay

那就證明更改成功,已經從Devicemapper換到了ovelay了。


附:Docker目前支援的檔案系統

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/82/09/wKioL1dIS1Lx3I0CAAA02T6uBaQ601.png" title="QQ圖片20160527212316.png" alt="wKioL1dIS1Lx3I0CAAA02T6uBaQ601.png" />


參考:

https://docs.docker.com/engine/userguide/storagedriver/selectadriver/

https://docs.docker.com/engine/userguide/storagedriver/aufs-driver/

https://dcos.io/docs/1.7/administration/installing/custom/system-requirements/#docker

http://coolshell.cn/articles/17200.html

http://www.infoq.com/cn/articles/analysis-of-docker-file-system-aufs-and-devicemapper


本文出自 “天涯海閣” 部落格,請務必保留此出處http://shanker.blog.51cto.com/1189689/1783910

修改CentOs7 上Docker預設檔案系統DeviceMapper為OverlayFS

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.