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

转载 2015年07月08日 15:21:34

转载:http://dl528888.blog.51cto.com/2382721/1606170

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

1
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查看

1
2
3
4
5
6
7
8
9
10
11
12
13
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容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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、使用我的脚本动态扩展容器空间

脚本内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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空间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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

1
2
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容器磁盘空间的时候,出现

1
2
3
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



R语言shiny应用之快速上手

-
  • 1970年01月01日 08:00

Docker修改空间大小

Docker默认空间大小分为两个,一个是池空间大小,另一个是容器空间大小。 池空间大小默认为:100G 容器空间大小默认为是:10G 所以修改空间大小也分为两个: 这里使用ce...
  • chengxuyuanyonghu
  • chengxuyuanyonghu
  • 2017-08-01 22:13:45
  • 2625

docker设定容器大小

http://www.aixchina.net/Question/172551
  • goflyfreely
  • goflyfreely
  • 2017-04-24 16:43:49
  • 1325

docker高级应用之多台主机网络互联

转载:http://dl528888.blog.51cto.com/2382721/1611491 目前docker主要应用于单机环境,使用网桥模式,但如果想把多台主机网络互相,让多台主机内...
  • yugongpeng_blog
  • yugongpeng_blog
  • 2015-07-08 15:45:24
  • 1489

CentOS7下Docker Storage Pool扩容

前言:在docker刚起步的时候,RHEL的内核并不支持AUFS作为docker的后端存储而将移植工作推迟。后来,红帽和docker合作开发一种基于Device Mapper技术的后端存储框架,也就是...
  • counsellor
  • counsellor
  • 2016-11-30 20:57:35
  • 2035

docker容器存放目录磁盘空间满了

今天在Liunx服务器上重启docker的时候,发现容器启动不了了,报的错误是:"ERROR:cannot  create temporary directory!"。我的猜测应该就是磁盘空间满了,于...
  • niu_hao
  • niu_hao
  • 2017-12-22 14:38:55
  • 2607

【Docker】增加Docker容器的容量

一般Docker容器默认大小是10G, 如果run的时候忘记指定大小.或者在使用过程中发现不够用了.可以通过下面方法解决. 我先把run指定大小的命令放出来 sudo docker -d --sto...
  • renhanchi
  • renhanchi
  • 2017-09-21 16:12:52
  • 363

[Kubernetes] 容器挂载 ceph rbd 卷的平滑扩容方法

一、 背景介绍         在之前的博客已经介绍了 Kubernetes 集成 ceph 分布式存储实现数据持久化的技术;         本篇介绍如何对已经挂载到容器的rbd卷进行空间扩(缩...
  • shida_csdn
  • shida_csdn
  • 2018-01-29 14:25:06
  • 357

使用 Device Mapper来改变Docker 容器的大小

作者:Jérôme Petazzoni ( Docker 布道师)译者:Mark Shao ( EMC 中国高级工程师)如果在 CentOS 、 REHL 、 Fedor 或者其他默认没有 AUFS ...
  • feiskyer
  • feiskyer
  • 2014-11-18 21:52:20
  • 3486

Docker容器学习梳理-容器硬盘热扩容

前面已介绍了docker很多知识点的操作记录,今天这里梳理下docker容器空间扩展的操作。默认情况下,docker容器的空间是10G。在实际生产环境下,对docker容器进行热扩容(动态扩容)是非常...
  • sqzhao
  • sqzhao
  • 2017-05-07 03:53:46
  • 949
收藏助手
不良信息举报
您举报文章:docker高级应用之动态扩展容器空间大小
举报原因:
原因补充:

(最多只允许输入30个字)