如何给docker扩容

参考文章:

  1. 动态扩容Linux根目录:/dev/mapper/centos-home分配部分空间给/dev/mapper/centos-root(/dev/mapper/centos-root经常会满,可是/dev/mapper/centos-home很空) - 金龟子大战猕猴桃 - 博客园 (cnblogs.com)
  2. Docker关闭不掉进程,Stopping docker.service, but it can still be activated by: docker.socket_warning: stopping httpd.service, but it can still _爱吃醋的小可爱的博客-CSDN博客
  3. Linux中fuser命令用法详解 - Tse先生 - 博客园 (cnblogs.com)
  4. 问题:INTERNAL ERROR: cannot create temporary directory及解决方法_cannot creat tempory-CSDN博客

具体步骤

在阅读本文时,笔者默认你已安装dockerdocker-compose

  1. 请切换至root用户,避免后续操作缺少相应的权限。

    1
    2
    # 切换至root用户,然后输入密码
    su root
  2. 查看当前磁盘使用情况。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看磁盘
    df -h

    # 文件系统 容量 已用 可用 已用% 挂载点
    # devtmpfs
    # tmpfs
    # tmpfs
    # tmpfs
    # /dev/mapper/centos-root 50G 50G 16k 100% /
    # /dev/sda1
    # /dev/mapper/centos-home 957G 33M 957G 1% /home
    # overlay 50G 50G 16k 100% /data/lib/docker/overlay2/...
    # overlay 50G 50G 16k 100% /data/lib/docker/overlay2/...
    # ......
    # tmpfs

    重点关注/dev/mapper/centos-root/dev/mapper/centos-home两个文件系统。如果你的服务器上的/dev/mapper/centos-root/dev/mapper/centos-home叫做别的名称,请将下文中的/dev/mapper/centos-root/dev/mapper/centos-home替换成你服务器上对应的名称

  3. 扩容思路

    文件系统/dev/mapper/centos-root对应/目录,文件系统/dev/mapper/centos-home对应/home目录。将/home文件夹备份,删除/home文件系统所在的逻辑卷,增大/文件系统所在的逻辑卷,增大/文件系统大小,最后新建/home目录,并恢复/home文件夹下的内容。

  4. 关闭docker容器。

    1
    2
    # 关闭docker容器
    docker-compose stop

    如果提示INTERNAL ERROR: cannot create temporary directory,表明docker磁盘已经用完,可以使用docker system prune清理关闭的容器、无用的数据卷、网络和虚悬镜像,本文不对此进行赘述,请直接执行下一步的操作

  5. 关闭docker服务。

    1
    2
    3
    4
    5
    # 关闭docker服务
    systemctl stop docker

    # 查看docker状态
    systemctl status docker

    如果输入systemctl stop docker后提示:Warning: Stopping docker.service, but it can still be activated by: docker.socket,请先关闭docker自动唤醒机制,然后再关闭docker服务

    1
    2
    # 关闭docker自动唤醒
    systemctl stop docker.socket
  6. 备份源目录文件。

    1
    2
    # 将/home目录打包放到/run目录下,也可以放在别的目录下,请保证该目录下磁盘空间充足
    tar cvf /run/home.tar /home
  7. 终止源目录下的进程。

    1
    2
    # 终止/home目录下的进程
    fuser -km /home

    如果提示fuser命令不存在,如果安装fuser提示磁盘不足请重试

    1
    2
    # 安装fuser
    yum install -y psmisc
  8. 卸载源目录。

    1
    2
    # 卸载/home目录
    umount /home
  9. 删除源目录对应的逻辑卷。

    1
    2
    # 删除/home目录对应的/dev/mapper/centos-home逻辑卷
    lvremove /dev/mapper/centos-home
  10. 扩容目标逻辑卷。

1
2
# 给/dev/mapper/centos-root数据卷扩容100g
lvextend -L +100G /dev/mapper/centos-root
  1. 扩大目标文件系统。

    1
    2
    # 扩大/dev/mapper/centos-root文件系统
    xfs_growfs /dev/mapper/centos-root
  2. 重建源目录对应的逻辑卷。

    请注意,此处的大小800G,最好是填写原大小减去为centos-root扩容的大小

    1
    2
    # 重建/dev/mapper/centos-home逻辑卷
    lvcreate -L 800G -n/dev/mapper/centos-home
  3. 重建源文件系统。

    1
    2
    # 创建/dev/mapper/centos-home文件系统
    mkfs.xfs /dev/mapper/centos-home
  4. 重新挂载源目录。

    1
    2
    # 挂载/dev/mapper/centos-home目录
    mount /dev/mapper/centos-home
  5. 恢复源目录中的内容。

    1
    2
    # 将备份文件解压
    tar xvf /run/home.tar -C /
  6. 再次查看当前磁盘使用情况。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # 查看磁盘
    df -h

    # 文件系统 容量 已用 可用 已用% 挂载点
    # devtmpfs
    # tmpfs
    # tmpfs
    # tmpfs
    # /dev/mapper/centos-root 150G 50G 100G 33% /
    # /dev/sda1
    # /dev/mapper/centos-home 800G 33M 800G 1% /home
    # overlay 50G 50G 16k 100% /data/lib/docker/overlay2/...
    # overlay 50G 50G 16k 100% /data/lib/docker/overlay2/...
    # ......
    # tmpfs
  7. 重启服务器(如果重启docker成功则跳过,如果失败请重启服务器)。

    1
    2
    # 重启服务器
    reboot
  8. 重启docker服务。

    1
    2
    3
    4
    5
    # 开启docker服务
    systemctl start docker

    # 查看docker状态
    systemctl status docker

    如果之前关闭了docker自动唤醒机制,则进行恢复

    1
    2
    # 开启docker自动唤醒
    systemctl start docker.socket
  9. 重启所有docker容器。

    1
    docker-compose restart
  10. 删除/run下面的备份。

    1
    rm -rf /run/home.tar