zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    python的多进程
    sqlalchemy的缓存和刷新
    uuid
    区块链的理解
    列表推导式,两个for循环的例子
    Fiddler 抓包工具总结
    python---webbrowser模块的使用,用非系统默认浏览器打开
    使用jmeter做web接口测试
    selenium2中关于Python的常用函数
    Selenium2+Python自动化学习笔记(第1天)
  • 原文地址:https://www.cnblogs.com/HD/p/4807088.html
Copyright © 2011-2022 走看看