Docker默認空間大小分爲兩個,一個是池空間大小,另外一個是容器空間大小。html
池空間大小默認爲:100Gdocker
容器空間大小默認爲是:10Gshell
因此修改空間大小也分爲兩個:centos
這裏使用centos下的yum進行安裝的Docker。bash
首先,修改空間大小,必需使Docker運行在daemon環境下,即先中止正在運行的docker服務:app
service docker stop
而後使用命令使用daemon環境下運行docker:spa
docker -d
1、修改池空間大小方法:htm
dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=1000 dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=1G count=0 seek=10
上面的1000爲1TB大小,即爲數據池空間大小爲1TB,而10則爲Metadata的空間大小,10GBblog
從運行完後,使用命令查看docker池空間大小:get
docker info
能夠看到池空間已經被設置爲data=1TB和metadata=10GB
2、修改容器空間大小:
一、首先先進入目錄(使用yum安裝docker的默認目錄):
cd /dev/mapper/
二、使用命令查看容器是否正在運行。
docker ps -a
這裏能夠看到容器test正在運行。
三、使用命令查看容器卷:
dmsetup table
能夠看到20971520,這個是卷空間值,咱們須要修改的就是這裏。
其它的值要記下:253:7 11
四、使用ls或ll命令查看在/dev/mapper/目錄下的文件是否存在。(這步很重要,由於非正在運行的Container是不會有這個文件的)
五、使用命令修改容器空間大小:
echo 0 88080384 thin 253:7 11 | dmsetup load docker-253:1-184549824-95f242e4fe2fef132ab1a706ebf8eecbb1c6db19547c3f12b34b76a5dee96c7e
這裏的88080384會替換原20971520值,意思爲:42GB。
計數公式爲:42*1024*1024*1024/512
可使用命令打印:
echo $((42*1024*1024*1024/512))
接着使用命令:
dmsetup resume docker-253:1-184549824-95f242e4fe2fef132ab1a706ebf8eecbb1c6db19547c3f12b34b76a5dee96c7e resize2fs /dev/mapper/docker-253:1-184549824-95f242e4fe2fef132ab1a706ebf8eecbb1c6db19547c3f12b34b76a5dee96c7e
完成。
而後進入容器的終端,使用命令df -h便可看到修改後的容器空間:
寫了個shell腳本,用於修改池、容器空間使用:
一、resize_docker.sh
#!/bin/bash DATA_SIZE=$1 METADATA_SIZE=$2 if [ "$DATA_SIZE" = "" ]; then DATA_SIZE=1000 fi if [ "$METADATA_SIZE" = "" ]; then METADATA_SIZE=10 fi # Stop docker service systemctl stop docker # Resize docker data space dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1G count=0 seek=$DATA_SIZE # Resize docker metadata space dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=1G count=0 seek=$METADATA_SIZE # Start docker service systemctl start docker
運行腳本方法:
sh resize_docker.sh 1000 10
將會把docker的池修改成data=1TB,metadata=10GB
二、resize_container.sh
#!/bin/bash CID=$1 SIZE=$2 if [ "$CID" != "" ] && [ "$SIZE" != "" ]; then DEV=$(basename $(echo /dev/mapper/docker-*-$CID)); dmsetup table $DEV | sed "s/0 [0-9]* thin/0 $(($SIZE*1024*1024*1024/512)) thin/" | dmsetup load $DEV; dmsetup resume $DEV; resize2fs /dev/mapper/$DEV; echo "Resize $CID completed." else echo "Usage: sh resize_container 459fd505311ad364309940ac24dcdb2bdfc68e3c3b0f291c9153fb54fbd46771 100"; fi
運行腳本方法:
sh resize_container.sh 459fd505311ad364309940ac24dcdb2bdfc68e3c3b0f291c9153fb54fbd46771 100
將容器459fd505311ad364309940ac24dcdb2bdfc68e3c3b0f291c9153fb54fbd46771的空間修改成100GB
注:修改空間,必需是在docker的daemon模式下進行。
參考文獻: