软件版本
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 | docker rmi 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。
- 只能扩容不能缩减。
建议:
实际使用中,数据还是尽量放数据卷中,放镜像中的话,会造成镜像太过于雍肿,就违背了容器本身设计的初仲了。