共计 5979 个字符,预计需要花费 15 分钟才能阅读完成。
前言:由于之前运行 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 http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
Retrieving http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
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: 查看分区情况
$ cat /proc/partitions
major minor #blocks name
202 0 68157440 xvda
202 1 512000 xvda1
202 2 5242880 xvda2
202 3 2097152 xvda3
202 4 1 xvda4
202 5 60303360 xvda5
202 16 104857600 xvdb
202 17 104856576 xvdb1
253 0 106496 dm-0
253 1 103698432 dm-1
253 2 103698432 dm-2
2: 查看 device mapper 的状态
$ dmsetup status
docker–vg-docker–pool: 0 1159217152 thin-pool
docker–vg-docker–pool_tdata: 0 1159217152 linear
docker–vg-docker–pool_tmeta: 0 1179648 linear
3: 查看 device mapper 设备依赖关系
$dmsetup deps
docker–vg-docker–pool: 2 dependencies : (253, 1) (253, 0)
docker–vg-docker–pool_tdata: 1 dependencies : (202, 17)
docker–vg-docker–pool_tmeta: 1 dependencies : (202, 17)
输出信息中(202, 17), 对应了分区上的 xvdb 这个设备,说明依赖的是 xvdb
4:删除掉 device mapper 映射出来的设备
$ dmsetup remove docker–vg-docker–pool
$ dmsetup remove docker–vg-docker–pool_tdata
$ dmsetup remove docker–vg-docker–pool_tmeta
$ dmsetup status
No devices found
5:格式化磁盘
$ mkfs.xfs -f /dev/xvdb
6:创建 docker 的数据目录,挂载磁盘
$ mkdir -p /data/docker
$ mount /dev/xvdb /data/docker
$ df -h
Filesystem Size Used Avail Use% Mounted ondevtmpfs
16G 0 16G 0% /dev/dev/xvda5
58G 2.3G 56G 4% //dev/xvda2
5.0G 40M 5.0G 1% /home/dev/xvda1
497M 161M 337M 33% /boot/dev/xvdb
100G 33M 100G 1% /data/docker
(3)修改 docker 启动方式为 overlayfs
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/docker daemon –storage-driver=overlay –graph=”/data/docker” –insecure-registry registry.cntv.net
(4)reload 配置并启动 docker
$ systemctl daemon-reload
$ systemctl start docker
$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
$ ls /data/dockercontainers image network overlay swarm tmp trust volumes
overlayfs 配置完毕!!!
遇到的问题:
在修改 docker 启动配置时 docker.service 原来的默认配置中是这样的
ExecStart=/usr/bin/dockerd -H fd://
当我改成
ExecStart=/usr/bin/dockerd –storage-driver=overlay –graph=”/data/docker” –insecure-registry registry.cntv.net -H fd://
启动的时候,docker 报错了。
报错内容:no sockets found via socket activation: make sure the service was started by systemd.
在 github 查到了这个更新。1.12 版本之后这个配置发生了改变。解决办法中将 -H fd:// 从 ExecStart 指令中删除,改成如下方式解决。
1 ExecStart=/usr/bin/dockerd –storage-driver=overlay –graph=”/data/docker” –insecure-registry registry.cntv.net
地址:https://github.com/docker/docker/releases/tag/v1.12.5
更多 Docker 相关教程见以下内容:
Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm
64 位 CentOS 下安装与启动 Docker http://www.linuxidc.com/Linux/2017-03/141714.htm
CentOS7.2 定制属于自己的 Docker 私有库 http://www.linuxidc.com/Linux/2017-03/141850.htm
Ubuntu 使用 VNC 运行基于 Docker 的桌面系统 http://www.linuxidc.com/Linux/2015-08/121170.htm
阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm
Ubuntu 15.04 下安装 Docker http://www.linuxidc.com/Linux/2015-07/120444.htm
在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm
在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm
Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm
Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/142138.htm