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: devicemapperPool Name: docker-8:17-37748738-poolData file: /data1/docker/devicemapper/devicemapper/dataMetadata file: /data1/docker/devicemapper/devicemapper/metadataData Space Used: 21498.9 MbData Space Total: 102400.0 MbMetadata Space Used: 13.7 MbMetadata 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-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7ext4    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 ]; thenecho "Usage: container_name increase_capacity"echo "Example: I want increase 11G to test"echo "The command is:   sh `basename $0` test 11"exit 1fi
if [ `docker inspect $1 &>>/dev/null &&  echo 0 || echo 1` -eq 1 ];thenecho "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 ];thenecho "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 ];thenecho "dynamic container $1 disk to ${2}G is success!"
elseecho "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-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7ext4     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-1716fe941926dbd0b247b85d73e83b9465322a5005edc3c6182b59a6ac0939a7ext4     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

docker高级应用之动态扩展容器空间大小相关推荐

  1. 编写一个C程序,实现以下功能:动态申请长度为5的整数空间数组,用户输入5个整数;动态扩展数组空间为8,用户另外输入3个整数,最后输出扩展后的全部数组元素。

    DGUT最简单的题.没有之一,只要面向GOOGLE和百度编程就行. 在GOOGLE查询malloc和realloc. malloc:动态申请内存. realloc:动态更改(扩展)内存 代码如下 #d ...

  2. Docker 扩容 容器空间大小 - 九

    Docker 扩容: 提前规划 : 一是从宿主机 配置磁盘格式 LVM 宿主机可以动态扩展: 二是 在容器上的扩容:默认是 100G .然后创建容器时候 挂载目录 或者直接池扩展: 默认 Docker ...

  3. VHD作为引导盘后阻止动态扩展到完整大小,防止蓝屏。

    简介 当系统启动时, 为了保证有足够的空间和防止数据损坏, 动态扩展VHD将扩大到其完整大小. 如果计算机无法分配足够的物理硬盘空间放置VHD, 它将会生成一个停止错误信息, 并且阻止操作系统继续启动 ...

  4. Virtualbox最全扩展虚拟磁盘空间大小(vdi/vmdk)方法(Mac/Linux/Windows)

    有时我们在使用Virtualbox虚拟机时,分配给虚拟机的磁盘空间太小,导致后期需要扩容,通过以下方法可以扩展磁盘空间. 增强虚拟磁盘空间容量(VDI) 扩展前最好把所有快照删除掉! 方法一:扩展磁盘 ...

  5. oracle扩展归档空间大小,解决Oracle数据库归档日志占满磁盘空间问题

    1.常用命令 show parameter log_archive_dest; sql> archive log list; sql> select * from V$FLASH_RECO ...

  6. Docker修改空间大小

    Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小. 池空间大小默认为:100G 容器空间大小默认为是:10G 所以修改空间大小也分为两个: 这里使用centos下的yum进行安 ...

  7. Oracle 查看和扩展表空间

    一.查询表空间使用情况 select a.tablespace_name as "表空间名",a.bytes / 1024 / 1024 as "表空间大小(M)&quo ...

  8. oracle增加表空间大小

    oracle增加表空间大小 第一步:查看表空间的名字及文件所在位置: select tablespace_name, file_id, file_name, round(bytes/(1024*102 ...

  9. Docker容器虚拟化技术---Docker高级实战(DockerFile)2

    Docker容器虚拟化技术-Docker高级实战(DockerFile) DockerFile是一个文本格式的配置文件,用户可以使用DockerFile来快速创建自定义的镜像. 1. DockerFi ...

最新文章

  1. 使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
  2. AI智能手机会是什么样?至少有这十个功能
  3. codeforce 603B - Moodular Arithmetic
  4. php 原生文件下载
  5. iphone最新款手机_苹果罕见“跌停”!遭遇6年来最惨淡一夜,2019年全球股市第一颗雷引爆...
  6. java == hashcode,java中==和equals和hashCode的区别
  7. mediarecorder添加时间戳_Python脚本实现数据处理(官方实例)和Hive自带时间函数...
  8. redis发布与订阅
  9. Mysql 单表、连表 in 子查询条件拼接
  10. linux最高权限密码,Linux运维知识之15、login.defs(默认)登录和Linux默认权限设置(密码复杂度,相关安全设置)...
  11. 裂变海报设计的落地干货,为什么海报在裂变活动中这么重要?
  12. C# word类库 光标移动
  13. 黄金分割圆怎么画matlab,黄金分割线的画法和使用方法
  14. Maven下载sources时报错java.lang.RuntimeException: Cannot reconnect
  15. 扩展lucas学习笔记
  16. qq看点模块测试用例
  17. 深入理解模拟退火算法(Simulated Annealing)
  18. 缠中说禅《论语》详解:给所有曲解孔子的人
  19. html+css模仿的锤子官方首页
  20. Mac anaconda相关

热门文章

  1. socket补充:通信循环、链接循环、远程操作及黏包现象
  2. 20175213 2018-2019-2 《Java程序设计》第4周学习总结
  3. 分布式工具的一次小升级⏫ 1
  4. 回溯算法 ------回溯算法的几个例子
  5. Lua开发学习4-普通循环和迭代器循环
  6. rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计
  7. 模拟 Codeforces Round #297 (Div. 2) A. Vitaliy and Pie
  8. weblogic数据源配置的问题,weblogic密码破解
  9. c# streamReader转XmlDocument读取节点
  10. 学习关于时间在sql里面的对比,用if语句(这个有点特别)