设为首页 收藏本站
查看: 2866|回复: 0

[经验分享] 修改CentOs7 上Docker默认文件系统DeviceMapper为OverlayFS

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-5-30 09:25:40 | 显示全部楼层 |阅读模式
最近一直在研究Mesos, Marathon跟Docker结合的容器云平台,Mesos 框架已经搭好,并且Marathon也可以实现简单的Docker应用管理了,然后今天尝试搭建一下mesosphere公司的DC/OS平台(https://dcos.io/),利用这个平台可以很容易实现基于容器的云计算平台的资源调度,管理,应用分配,负载均衡,动态扩展,故障转移等。DC/OS底层系统也是基于Docker的,根据官方文档建议,我们把CentOS7系统上Docker默认的文件系统DeviceMapper改为OverlayFS。
Docker最开始支持的文件系统是Aufs的,是一种Union File System,原理就是将多个目录挂在到同一个虚拟目录下,整个文件系统是一个分层的概念,请看图:
wKiom1dIIWXAoDIbAAJ5OoZjH4s479.jpg
然后RedHat系列的系统是不支持Aufs的,当Docker变得越来越流行的时候,RedHat公司发行我也得插一脚进去,然后RedHat公司就对这个Aufs研究了一下,然后说“恩,我们牛逼,我要开发一套新的文件系统用来运行Docker”。后来这套系统就是基于自家的在kernel2.6之后被引进的DeviceMapper技术。主要用到Docker上的就是Snapshot和Thinly-provisioned Snapshot, 这个Snapshot在LVM逻辑卷管理场景下用来创建虚拟快照的,Thin-Provisioning是一项利用虚拟化方法减少物理存储部署的技术,可最大限度提升存储空间利用率。当这两个技术结合起来就是DeviceMapper给RedHat系统实现Docker文件系统的最后方案了。其实这个方案也是基于分层的理论给每一层镜像创建快照。如图:
wKioL1dIJdHwqFDHAAD_qU7DrCc141.jpg
然而DeviceMapper的性能并不是那么的好,DC/OS官网给出的解释是会出现unknown issue并且不能再Docker里面运行Docker,DeviceMapper默认情况下创建loop-lvm的方式来构建镜像和容器的snapshots。但是在生产环境下Docker官方建议采用直连的lvm卷来构建镜像和容器,然后在启动Docker Daemon的时候使用如下方式来加载:
1
2
3
4
5
{
     "storage-driver": "devicemapper",
     "storage-opts": [         "dm.thinpooldev=/dev/mapper/docker-thinpool",         "dm.use_deferred_removal=true"
     ]
}



在系统里运行docker info即可查看到使用的是什么文件系统:
这是Cent6.5系统的,发现使用的是devicemapper,而且Data File是loop0:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# docker info
Containers: 11
Images: 63
Storage 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.2
Logging Driver: json-file
Kernel Version: 2.6.32-573.22.1.el6.x86_64
Operating System: <unknown>
CPUs: 2
Total Memory: 2.819 GiB
Name: bastion.shanker
ID: SJVK:KAXO:ZDAB:XWSM:O45I:EF6U:GE2T:RU3Y:NW6B:K4IQ:DYEN:B4BJ




这台是Ubuntu12.04的,使用的Aufs系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 38
Server Version: 1.10.3
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 101
Dirperm1 Supported: false
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: host bridge null
Kernel Version: 3.13.0-24-generic
Operating System: Ubuntu 14.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 1.463 GiB
Name: dbslave.shanker
ID: IDR4:IA4B:3GDE:O6KF:IACI:BQE2:5SJL:25CA:4KV3:OCIG:RGYC:N22G
Username: shanker
Registry: https://index.docker.io/v1/
WARNING: No swap limit support




这台是CentOS7.2系统,使用的是我更改后的OverlayFS系统:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# docker info
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 5
Server Version: 1.11.1
Storage Driver: overlay
Backing Filesystem: xfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge null host
Kernel Version: 3.10.0-327.18.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.703 GiB
Name: ukcent2.novalocal
ID: 7Q46:GGPP:HOLP:5ICX:WXV7:ZC73:S45I:HVC2:UEWX:FL6L:DMSC:TVYH
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/



然后我们今天要做的是放弃DeviceMapper,使用OverlayFS来作为默认的存储系统。首先要升级到CentOS7.2,有一个XFS的Bug在7.2系统被修复了。


1.    将OverlayFS加到module目录下
1
echo "overlay" > /etc/modules-load.d/overlay.conf




2.    reboot 系统,执行lsmod看时候看到overlay
1
2
# lsmod | grep over
overlay                42451  0




3.    将Docker源添加到系统里
1
2
3
4
5
6
7
8
cat >/etc/yum.repos.d/docker.repo<<E
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
E




4.    配置Docker Daemon用OverlayFS启动

1
2
3
4
5
6
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo 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,设置开机自启动
1
2
3
sudo yum -y install docker-engine
sudo sysctemctl start docker
sudo systemctl enable docker




6.    Docker info 看一下,如果看到
1
Storage Driver: overlay



那就证明更改成功,已经从Devicemapper换到了ovelay了。

附:Docker目前支持的文件系统
wKioL1dIS1Lx3I0CAAA02T6uBaQ601.jpg

参考:
https://docs.docker.com/engine/u ... iver/selectadriver/
https://docs.docker.com/engine/u ... driver/aufs-driver/
https://dcos.io/docs/1.7/adminis ... equirements/#docker
http://coolshell.cn/articles/17200.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-223723-1-1.html 上篇帖子: Centos安装docker及docker基础命令 下篇帖子: Docker暴露2375端口,引起安全漏洞
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表