docker高级应用之动态扩展容器空间大小
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高级应用之动态扩展容器空间大小的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从委托而起(二)认识委托
- 下一篇: intelssd在linux固件升级,B