一、磁盘驱动模式为devicemapper
Docker从1.13版本开始默认磁盘驱动模式:overlay2,可以修改为Devicemapper模式,修改方法:
cat /etc/sysconfig/docker-storage-setup
将驱动模式修改为devicemapper模式:
STORAGE_DRIVER=devicemapper
1、新建容器磁盘资源限制
可以指定默认容器的大小(在启动容器的时候指定),可以在docker配置文件里通过dm.basesize参数指定,指定Docker容器rootfs容量大小为20G:
vi /etc/sysconfig/docker-storage 修改为如下代码: DOCKER_STORAGE_OPTIONS="--storage-driver devicemapper --storage-opt dm.basesize=20G"
重启docker服务。
启动一个容器后查看磁盘。
2、容器启动后给在线扩容
基于现有容器在线扩容,宿主机文件系统类型支持:ext2、ext3、ext4、不支持XFS。
1)查看原容器的磁盘空间大小:
2)查看mapper设备:
3)查看卷信息表:
4)根据要扩展的大小,计算需要多少扇区:
第二个数字是设备的大小,表示有多少个512-bytes 的扇区. 这个值略高于 10GB 的大小。
我们来计算一下一个 15GB 的卷需要多少扇区,
$ echo $((15*1024*1024*1024/512)) 31457280
修改卷信息表--激活--并且验证(红色3个部分)
5)修改文件系统大小:
6)最后验证磁盘大小:
二、磁盘驱动模式为overlay2
1、新建容器磁盘资源限制
Docker容器默认启动的虚拟机,会占用宿主机的资源(CPU、内存、硬盘),例如默认Docker基于Overlay2驱动方式,容器硬盘的rootfs根分区空间是整个宿主机的空间大小。
可以指定默认容器的大小(在启动容器的时候指定),可以在docker配置文件:/etc/sysconfig/docker中,OPTIONS参数后面添加如下代码,指定Docker容器rootfs容量大小为20G:
OPTIONS='--storage-opt overlay2.size=20G'
以上方法只适用于新容器生成,并且修改后需要重启docker,无法做到动态给正在运行容器指定大小,如下图为默认容器大小:
Overlay2 Docker磁盘驱动模式,如果要调整其大小,通过如上的方法,会导致Docker引擎服务无法启动,
如果配置以上方法限额,需要让Linux文件系统设置为xfs,并且支持目录级别的磁盘配额功能;
CentOS7.x Xfs磁盘配额配置,
新添加一块硬盘,设置磁盘配额方法步骤如下:
1)添加新的硬盘如图所示:
2)格式化硬盘为xfs文件系统格式,命令如下:
mkfs.xfs -f /dev/sdb
3)创建data目录,后续将作为docker数据目录:
mkdir /data/ -p
4)挂载data目录,并且开启磁盘配额功能(默认xfs支持配额功能);
mount -o uquota,prjquota /dev/sdb /data/
挂载配额类型如下:
-
根据用户(uquota/usrquota/quota)
-
根据组(gquota/grpquota) ;
-
根据目录(pquota/prjquota)(不能与grpquota同时设定)
在已有文件系统下开启限额功能
5)在docker配置文件:/etc/sysconfig/docker中,OPTIONS参数后面添加如下代码,指定Docker容器rootfs容量大小为20G
--storage-opt overlay2.size=20G
6)将docker引擎默认数据存储目录:/var/lib/docker重命名,并且将/data/docker目录软链接至/var/lib/下即可:
mkdir -p /data/docker/
cd /var/lib/
mv docker docker.bak
ln -s /data/docker/ .
8)重启Docker服务,并且查看进程,可以看到docker overlay2.size大小配置,如图所示:
9)基于Docker客户端指令启动Docker容器,并且查看最新容器的磁盘空间为10G,则设置容器大小成功,如图所示:
查看配额-配置详情,命令如下:
xfs_quota -x -c 'report' /data/
可以通过命令xfs_quota设置来为用户和目录分配配额,也可以通过命令来查看配额信息:
xfs_quota -x -c 'limit bsoft=10M bhard=10M jfedu' /data xfs_quota -x -c 'report' /data/