一、磁盘驱动模式为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 容器内磁盘读写的因素 docker磁盘空间限制_docker

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_Docker_02

重启docker服务。

启动一个容器后查看磁盘。

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_文件系统_03

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)添加新的硬盘如图所示:

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_04

2)格式化硬盘为xfs文件系统格式,命令如下:

mkfs.xfs -f /dev/sdb

3)创建data目录,后续将作为docker数据目录:

mkdir /data/ -p

4)挂载data目录,并且开启磁盘配额功能(默认xfs支持配额功能);

mount -o uquota,prjquota /dev/sdb /data/

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_05

挂载配额类型如下:

  • 根据用户(uquota/usrquota/quota)
  • 根据组(gquota/grpquota) ;
  • 根据目录(pquota/prjquota)(不能与grpquota同时设定) 

在已有文件系统下开启限额功能

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_Docker_06

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_07

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_文件系统_08

5)在docker配置文件:/etc/sysconfig/docker中,OPTIONS参数后面添加如下代码,指定Docker容器rootfs容量大小为20G

--storage-opt overlay2.size=20G

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_Docker_09

6)将docker引擎默认数据存储目录:/var/lib/docker重命名,并且将/data/docker目录软链接至/var/lib/下即可:

mkdir -p /data/docker/
cd /var/lib/
mv docker docker.bak
ln -s /data/docker/  .

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_10

8)重启Docker服务,并且查看进程,可以看到docker overlay2.size大小配置,如图所示:

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_Docker_11

9)基于Docker客户端指令启动Docker容器,并且查看最新容器的磁盘空间为10G,则设置容器大小成功,如图所示:

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_12

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_Docker_13

 查看配额-配置详情,命令如下:

xfs_quota -x -c 'report' /data/

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_docker_14

可以通过命令xfs_quota设置来为用户和目录分配配额,也可以通过命令来查看配额信息:

xfs_quota -x -c 'limit bsoft=10M bhard=10M jfedu' /data
xfs_quota -x -c 'report' /data/

影响 Docker 容器内磁盘读写的因素 docker磁盘空间限制_文件系统_15