如何给docker扩容

731 阅读4分钟

如何给docker扩容

原文链接:如何给docker扩容 | 柳门竹巷 (zhbblog.top)

参考文章:

  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用户,避免后续操作缺少相应的权限。

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

    # 查看磁盘
    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容器。

    # 关闭docker容器
    docker-compose stop
    

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

  5. 关闭docker服务。

    # 关闭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服务

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    # 查看磁盘
    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               
    
  17. 重启服务器(如果重启docker成功则跳过,如果失败请重启服务器)。

    # 重启服务器
    reboot
    
  18. 重启docker服务。

    # 开启docker服务
    systemctl start docker
    
    # 查看docker状态
    systemctl status docker
    

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

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

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

    rm -rf /run/home.tar