[Linux] -Docker修改空間大小


Docker默認空間大小分為兩個,一個是池空間大小,另一個是容器空間大小。

池空間大小默認為:100G

容器空間大小默認為是:10G

所以修改空間大小也分為兩個:

這里使用centos下的yum進行安裝的Docker。

 

首先,修改空間大小,必需使Docker運行在daemon環境下,即先停止正在運行的docker服務:

service docker stop

然后使用命令使用daemon環境下運行docker:

docker -d

 


 

一、修改池空間大小方法:

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的空間大小,10GB

從運行完后,使用命令查看docker池空間大小:

docker info

可以看到池空間已經被設置為data=1TB和metadata=10GB

 

二、修改容器空間大小:

1、首先先進入目錄(使用yum安裝docker的默認目錄):

cd /dev/mapper/

 

2、使用命令查看容器是否正在運行。

docker ps -a

這里可以看到容器test正在運行。

 

3、使用命令查看容器卷:

dmsetup table

可以看到20971520,這個是卷空間值,我們需要修改的就是這里。

其它的值要記下:253:7 11

 

4、使用ls或ll命令查看在/dev/mapper/目錄下的文件是否存在。(這步很重要,因為非正在運行的Container是不會有這個文件的)

 

5、使用命令修改容器空間大小:

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腳本,用於修改池、容器空間使用:

1、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

 

2、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模式下進行。

 

參考文獻:

http://segmentfault.com/a/1190000002931564


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM