前言:由于之前运行Docker系统了几台机器很久一直没有更新,docker版本为1.9.1。使用的docker存储驱动为Devicemapper。本次需要更新Docker的管理平台,索性也就将底层的docker版本也升级到新版,并更改Devicemapper为overlayfs。由于操作系统是CentOS Linux release 7.1.1503 (Core),内核版本3.10.0-229.el7.x86_64,该内核版本已经支持overlayfs。但是由于新的内核4.9已经发布,在4.9的内核版本中,对硬件和文件系统方面的改进也很多,涉及到 Btrfs、XFS、F2FS、OverlayFS 的 UBIFS 支持、FUSE 支持 POSIX ACL、OverlayFS SELinux 等方面。所以本次也将内核版本升级到4.9。
更新如下
Kernel Version: 3.10.0-->4.9.0
Docker Version: 1.9.1-->1.12.2
Storage Driver: DeviceMapper-->Overlayfs
一:升级Kernel版本
(1)安装yum源
$ rpm -Uvh
Retrieving
warning: /var/tmp/rpm-tmp.X3PpyZ: Header V4 DSA/SHA1 Signature, key ID baadae52: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:elrepo-release-7.0-2.el7.elrepo ################################# [100%]
(2)安装kernel
$ yum -y --enablerepo=elrepo-kernel install kernel-ml-devel-4.9.0 kernel-ml-4.9.0
=======================================================================
Package Arch Version Repository Size
=======================================================================
Installing:
kernel-ml x86_64 4.9.0-1.el7.elrepo elrepo-kernel 39 M
kernel-ml-devel x86_64 4.9.0-1.el7.elrepo elrepo-kernel 11 M
Transaction Summary
========================================================================
Install 2 Packages
Installed:
kernel-ml.x86_64 0:4.9.0-1.el7.elrepo
kernel-ml-devel.x86_64 0:4.9.0-1.el7.elrepo
(3)检查当前版本
$ uname -r
3.10.0-229.el7.x86_64
(4)检查kernel启动顺序
$ awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core) with debugging
CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64
CentOS Linux 7 (Core), with Linux 0-rescue-f7e36a944a3d4035a61da37d8d4e2313
(5)设置启动kernel
根据上面检查kernel启动顺序,自上而下,从0开始的顺序。如果设置4.9启动那么如下命令
$grub2-set-default 0
重启
$reboot
(6)检查kernel版本
$ uname -r
4.9.0-1.el7.elrepo.x86_64
Kernel升级完毕!!!
二:升级Docker版本
(1)关闭docker进程,卸载老版本
$ systemctl stop docker
$ rpm -qa|grep docker
docker-engine-1.9.1-1.el7.centos.x86_64
docker-storage-setup-0.5-3.el7.centos.noarch
docker-engine-selinux-1.9.1-1.el7.centos.noarch
$ rpm -e docker-engine-1.9.1-1.el7.centos.x86_64
$ rpm -e docker-engine-selinux-1.9.1-1.el7.centos.noarch
(2)安装新版本
$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-selinux-1.12.2-1.el7.centos.noarch.rpm
$ wget https://yum.dockerproject.org/repo/main/centos/7/Packages/docker-engine-1.12.2-1.el7.centos.x86_64.rpm
# 使用yum命令可以解决依赖问题,如果直接rpm命令安装可能会报错。
$ yum install -y docker-engine-selinux-1.12.2-1.el7.centos.noarch.rpm
$ yum install -y docker-engine-1.12.2-1.el7.centos.x86_64.rpm
(3)检查新的docker版本
$ docker -v
Docker version 1.12.2, build bb80604
Docker升级完毕!!!
三:使用overlayfs
(1)检查是否有overlayfs模块
$ lsmod | grep overlay
overlay 49152 0
没有的话下面命令加载
$ modprobe overlay
(2)为overlayfs目录挂一块盘
因为之前没有使用docker默认的loopback方式(因为不是物理块设备,性能很差,大小也有限制),而是单独拿了一块物理盘来做Devicemapper。现在要将那块盘挂载到overlayfs的目录下使用。
注意:因为要改变存储方式,格式化盘。所以原来的数据肯定是没有了。一会docker启动后,原来的容器也是不存在的。
如果直接执行mkfs.xfs /dev/xvdb,肯定会报错device is busy,因为之前的devicemapper映射关系还在,磁盘被占用,是无法被格式化的。
1:查看分区情况