修改docker容器默认空间大小

软件版本
docker-ce 17.03
storagedriver:device-mapper:direct-lvm

docker 启动一个容器后默认根分区大小为10GB,通过docker info可以看见默认大小为10G,有时会不够用需要扩展。

两种修改方式

静态扩展

启动容器查看容器分区大小

指定容器默认空间大小为20G
修改/etc/docker/daemon.json,添加dm.basesize=xxx

需要注意的是只能扩容不能缩减。
重启docker

1
systemctl restart docker

此时还是不生效的,需要把镜像重新pull一遍

1
2
docker rmi centos
docker pull centos

重新run一个

缺点:

  • 非动态更改,改完后还需要重新启动docker
  • 更改后镜像需要重新pull下来。
  • 只能扩容不能缩减。

动态修改

以centos这个容器为例,动态修改这个容器默认空间为30G
创建个centos容器

1
docker run -itd --name centos centos  

找到对应的块设备

1
docker inspect centos|grep DeviceName


使用dmsetup table查看文件扇区信息
结果的第二个数字(41943040)是设备的大小,表示有多少个512字节的扇区,计算方法是(2010241024*1024/512)我们修改大小也只需要修改这个值。

将新的扇区大小写入,只需要修改第二个值

1
echo 0 62914560 thin 253:3 15|dmsetup load /dev/mapper/docker-253\:0-1940029-7ad938b4cb54e70bed0028bb5705c3f7ecd832591d56b076c7c59e51f8cb1276


将修改后的容器存储文件激活

1
dmsetup resume /dev/mapper/docker-253\:0-1940029-7ad938b4cb54e70bed0028bb5705c3f7ecd832591d56b076c7c59e51f8cb1276

再次查看


发现扇区大小改好了
文件系统更新
ext4、ext3、ext3文件系统使用

1
resize2fs /dev/mapper/docker-253\:0-1940029-7ad938b4cb54e70bed0028bb5705c3f7ecd832591d56b076c7c59e51f8cb1276

xfs文件系统使用

1
xfs_growfs -d /dev/mapper/docker-253\:0-1940029-7ad938b4cb54e70bed0028bb5705c3f7ecd832591d56b076c7c59e51f8cb1276

优点:

  • 动态修改,不需要修改docker启动参数,重启docker。
  • 不用重新pull镜像,针对单个容器,控制灵活。

缺点:

  • 上面用的方法只能是devicemapper的storage-driver。
  • 只能扩容不能缩减。

建议:
实际使用中,数据还是尽量放数据卷中,放镜像中的话,会造成镜像太过于雍肿,就违背了容器本身设计的初仲了。