前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker高级应用之动态扩展容器空间大小

Docker高级应用之动态扩展容器空间大小

作者头像
星哥玩云
发布2022-07-04 09:35:42
1.8K0
发布2022-07-04 09:35:42
举报
文章被收录于专栏:开源部署开源部署

docker容器默认的空间是10G,如果想指定默认容器的大小(在启动容器的时候指定),可以在docker配置文件里通过dm.basesize参数指定,比如 docker -d --storage-opt dm.basesize=20G

是指定默认的大小为20G,具体参数可以参考https://github.com/docker/docker/tree/master/daemon/graphdriver/devmapper 上面方法只是真的生成容器的时候进行的,并且修改后需要重启docker,无法做到动态给运行容器指定大小,下面我介绍一下如何动态的扩展容器空间大小。 动态扩展的优点: 1、不需要修改docker配置,并且重启docker服务; 2、可以直接对运行中的容器进行动态扩展(只能增,无法缩); 缺点: 1、docker所在宿主机分区的格式必须是ext2、ext3、ext4; 2、docker存储引擎必须是devicemapper 存储引擎查看,可以使用docker info查看 15:25:49 # docker info Containers: 5 Images: 62 Storage Driver: devicemapper  Pool Name: docker-8:17-37748738-pool  Data file: /data1/docker/devicemapper/devicemapper/data  Metadata file: /data1/docker/devicemapper/devicemapper/metadata  Data Space Used: 21498.9 Mb  Data Space Total: 102400.0 Mb  Metadata Space Used: 13.7 Mb  Metadata Space Total: 2048.0 Mb Execution Driver: lxc-1.0.6 Kernel Version: 3.10.0-123.el7.x86_64

从上面的Storage Driver可以看到我使用的引擎。 下面是动态扩展的例子: 1、新建立个test容器 15:23:48 # docker run --privileged -d  -p 22 --name='test' docker.ops-chukong.com:5000/CentOS6-http:new /usr/bin/supervisord 1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7 root@ip-10-10-27-221:/tmp 15:24:01 # docker inspect test|grep -i add         "IPAddress": "172.17.0.18", root@ip-10-10-27-221:/tmp 15:24:08 # ssh 172.17.0.18 The authenticity of host '172.17.0.18 (172.17.0.18)' can't be established. RSA key fingerprint is 39:7c:13:9f:d4:b0:d7:63:fc:ff:ae:e3:46:a4:bf:6b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.17.0.18' (RSA) to the list of known hosts. root@172.17.0.18's password: Last login: Mon Nov 17 14:10:39 2014 from 172.17.42.1 root@1716fe941926:~ 15:24:13 # df -hT Filesystem          Type    Size  Used Avail Use% Mounted on rootfs              rootfs  9.8G  470M  8.8G  5% / /dev/mapper/docker-8:17-37748738-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7                     ext4    9.8G  470M  8.8G  5% / shm                  tmpfs    64M    0  64M  0% /dev/shm /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerinit /dev/sda3            ext4    518G  30G  462G  6% /etc/resolv.conf /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hostname /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hosts /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerenv

可以看到我运行test容器的根分区是ext4分区,容器是10G

2、使用我的脚本动态扩展容器空间 脚本内容 15:22:12 # cat dynamic_modify_docker_disk.sh #!/bin/bash #This script is dynamic modify docker container disk #Author Deng Lei if [ -z $1 ] || [ -z $2 ]; then     echo "Usage: container_name increase_capacity"     echo "Example: I want increase 11G to test"     echo "The command is:  sh `basename $0` test 11"     exit 1                                                                                                                                                         fi if [ `docker inspect $1 &>>/dev/null &&  echo 0 || echo 1` -eq 1 ];then     echo "The container $1 is no exist!"     exit 1 fi container_id=`docker inspect -f '{{ .Id }}' $1` now_disk=`dmsetup table /dev/mapper/docker-*-$container_id|awk '{print $2}'` disk=$(($2*1024*1024*1024/512)) if [ $disk -lt $now_disk ];then     echo "I can't shink container $1 from $(($now_disk*512/1024/1024/1024))G to ${2}G!I only modify contanier increase disk!"     exit 1 fi dmsetup table /dev/mapper/docker-*-$container_id|sed "s/0 [0-9]* thin/0 $disk thin/"|dmsetup load /dev/mapper/docker-*-$container_id dmsetup resume /dev/mapper/docker-*-$container_id resize2fs /dev/mapper/docker-*-$container_id if [ $? -eq 0 ];then     echo "dynamic container $1 disk to ${2}G is success!" else     echo "dynamic container $1 disk to ${2}G is fail!" fi

目前给test容器进行动态增加20G空间 15:24:40 # sh dynamic_modify_docker_disk.sh test 20 dynamic container test disk to 20G is success! root@ip-10-10-27-221:/tmp 15:24:46 # ssh 172.17.0.18 root@172.17.0.18's password: Last login: Tue Jan 20 15:24:13 2015 from 172.17.42.1 root@1716fe941926:~ 15:24:52 # df -hT Filesystem          Type    Size  Used Avail Use% Mounted on rootfs              rootfs  20G  475M  19G  3% / /dev/mapper/docker-8:17-37748738-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7                     ext4    20G  475M  19G  3% / shm                  tmpfs    64M    0  64M  0% /dev/shm /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerinit /dev/sda3            ext4    518G  30G  462G  6% /etc/resolv.conf /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hostname /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hosts /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerenv

可以看到已经增加成功 下面在给test增加到50G 15:25:21 # sh dynamic_modify_docker_disk.sh test 50 dynamic container test disk to 50G is success! root@ip-10-10-27-221:/tmp 15:25:24 # ssh 172.17.0.18 root@172.17.0.18's password: Last login: Tue Jan 20 15:24:52 2015 from 172.17.42.1 root@1716fe941926:~ 15:25:27 # df -hT Filesystem          Type    Size  Used Avail Use% Mounted on rootfs              rootfs  50G  480M  47G  1% / /dev/mapper/docker-8:17-37748738-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7                     ext4    50G  480M  47G  1% / shm                  tmpfs    64M    0  64M  0% /dev/shm /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerinit /dev/sda3            ext4    518G  30G  462G  6% /etc/resolv.conf /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hostname /dev/sdb1            ext4    1.8T  30G  1.7T  2% /etc/hosts /dev/sdb1            ext4    1.8T  30G  1.7T  2% /.dockerenv

也可以增加成功 但我要是像缩减到30G 15:25:45 # sh dynamic_modify_docker_disk.sh test 30 I can't shink container test from 50G to 30G!I only modify contanier increase disk!

是无法进行缩减的,仅能进行增加操作。 至于动态增加的原理请参考http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/ FAQ: centos 7里使用docker的时候默认存储引擎是devicemapper 在进行动态调整docker容器磁盘空间的时候,出现 resize2fs 1.42.9 (28-Dec-2013) resize2fs: Device or resource busy while trying to open /dev/mapper/docker-253:1-1270544-d2d2cef71c86910467c1afdeb79c1a008552f3f9ef9507bb1e04d77f2ad5eac4 Couldn't find valid filesystem superblock.

原因是resize2fs仅能支持ext2、ext3、ext4,不支持xfs 所以建议docker服务器的文件系统格式调整为ext4

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档