• Docker overlay2磁盘占用过高


    Docker overlay2磁盘占用过高主要有以下三个原因:
      1、容器日志文件过大,未作限制
      2、docker未用容器、镜像、缓存等过多
      3、docker默认路径存放不合理

    一、磁盘容量查询

      通过以下两条命令可以定位磁盘占用过高原因,可根据查询结果做相应处置。

    1、df -h 容量查询

    [root@hostname ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        50G   50G   35M 100% /
    overlay          50G   50G   35M 100% /data/docker/overlay2/770abd1b64f51f05a0f7c5c71d7349f54c9c152c8f58263ea9dda4960a722d61/merged
    overlay          50G   50G   35M 100% /data/docker/overlay2/19de54ababc18c2eb4c0d011434ac785480169a4e694c736dcbe938d497b5b3f/merged
    overlay          50G   50G   35M 100% /data/docker/overlay2/78f613526719dd1eabd3fe1f383ca55f065182e538f81cb719dd53d01055e849/merged
    overlay          50G   50G   35M 100% /data/docker/overlay2/a18694da44feba8f8379f422fdf67c00a1ac97efb281f8578770b7da4d55ad6a/merged
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、du -sh * 文件大小查询

    #逐级排查大文件位置
    [root@hostname ~]# du -sh /*
    7.2G    /var
    [root@hostname ~]# du -sh /var/*
    37G     /opt/open
    [root@hostname ~]# du -sh /var/lib/*
    6.6G    /var/lib/docker
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    二、磁盘占用过高处理方法

    1、日志文件清理

      docker容器运行时会产生大量日志,默认路径:/var/lib/docker/containers/id-json.log,随着容器运行该日志文件会占用大量磁盘空间。

    1.1 日志清空

    [root@test ~]# echo '' > 容器id-json.log
    
    • 1

    注:不要直接删除日志文件,否则可能会影响新日志产生。

    1.2 限制日志文件大小

      以上方法只能暂时解决日志占用空间过大问题,如果想一劳永逸可修改docker配置文件,增加日志文件大小限制。

    [root@test ~]# vi /etc/docker/daemon.json 
    {
        "log-driver":"json-file",
        "log-opts":{
            "max-size" :"50m",
            "max-file":"1"
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.3 重启dokcer

    [root@test ~]# systemctl daemon-reload
    [root@test ~]# systemctl restart docker
    
    • 1
    • 2

    注:已存在的容器不会生效,需要重建该容器才可以使配置生效

    2、历史数据清理

      Docker长时间运行,会产生大量无用的镜像、容器、网络等缓存信息,占用大量磁盘空间。此时我们可以使用prune命令清理。

    2.1 释放所有未使用资源

    [root@test ~]# docker system prune
    WARNING! This will remove:
      - all stopped containers    //清理停止容器
      - all networks not used by at least one container  //清理未使用网络
      - all dangling images    //清理废弃镜像
      - all dangling build cache   //清理构建缓存
    
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    7a7fdd019a89eb68325d45ee6821c3f6f9a0b68b5631a21665ec484d59c8a44a
    
    Total reclaimed space: 202.4kB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    注:数据清理前一定要检查是否还有需要使用的容器和镜像,避免误清理。

    2.2 按需清理

    [root@test ~]# docker image prune  //清理废弃镜像
    [root@test ~]# docker container prune //清理停止容器
    [root@test ~]# docker network prune   //清理未使用网络
    [root@test ~]# docker system prune   //清理构建缓存
    
    • 1
    • 2
    • 3
    • 4

    3、修改Docker运行路径

    注:此方法需停止容器,迁移docker运行目录,请在业务空闲期,备份好数据后操作。
      Docker运行时使用的目录默认 “/var/lib/docker”,该目录占用根目录磁盘空间,根目录磁盘容量普遍较小。日常生成环境Linux常会挂载大容量数据盘,可以将Docker默认运行目录修改到数据盘。
    修改Docker运行路径有两种方法:
      1、迁移/var/lib/docker数据,创建软连接。此种方法不需要改配置文件。
      2、迁移/var/lib/docker数据,修改docker配置文件。

    3.1 迁移/var/lib/docker数据,创建软连接

    #docker运行目录在/var/lib/docker下
    [root@test ~]# df -h    
    文件系统                 容量  已用  可用 已用% 挂载点
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
    #停止所有容器,避免迁移时影响业务
    [root@test ~]# docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
    #将docker默认运行目录剪切到opt目录
    [root@test ~]# mv /var/lib/docker /opt/
    #查询是否已剪切完成
    [root@test ~]# ls /opt/
    containerd  docker  hio  rh
    #新运行目录创建软连接
    [root@test ~]# ln -s /opt/docker  /var/lib/docker
    #重启docker服务
    [root@test ~]# systemctl restart docker
    #启动所有容器
    [root@test ~]# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
    #检查原镜像是否存在
    [root@test ~]# docker images
    #检查容器是否运行正常
    [root@test ~]# docker ps 
    #检查docker默认路径是否切换成功,已切换到/opt/docker下
    [root@test ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.2 迁移/var/lib/docker数据,修改docker配置

    #docker运行目录在/var/lib/docker下
    [root@test ~]# df -h    
    文件系统                 容量  已用  可用 已用% 挂载点
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
    overlay                   50G  5.8G   45G   12% /var/lib/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
    #停止所有容器,避免迁移时影响业务
    [root@test ~]# docker stop $(docker ps -a | awk '{ print $1}' | tail -n +2)
    #将docker默认运行目录剪切到opt目录
    [root@test ~]# mv /var/lib/docker /opt/
    #查询是否已剪切完成
    [root@test ~]# ls /opt/
    containerd  docker  hio  rh
    #修改docker配置文件,添加 "data-root"路径
    [root@test ~]# vi /etc/docker/daemon.json
    {
       "data-root": "/opt/docker"
    }
    #重启docker服务
    [root@test ~]# systemctl daemon-reload
    [root@test ~]# systemctl restart docker
    #启动所有容器
    [root@test ~]# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
    #检查原镜像是否存在
    [root@test ~]# docker images
    #检查容器是否运行正常
    [root@test ~]# docker ps 
    #检查docker默认路径是否切换成功,已切换到/opt/docker下
    [root@test ~]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/176c72f3913eea50a7bded4ad65363280680615c083140c725cfa63e4287cc51/merged
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/4e844541eb13d9c7af1c01f0b4681915e617c650c22a20e52f4b77e1e90dc369/merged
    overlay                   50G  5.8G   45G   12% /opt/docker/overlay2/c9de256d8ded736cf99dddda4c4f68e9c5e5162e1b7e70abdb0cd3fbfbbb7a19/merged
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    电脑键盘上一些不常用的键介绍:F1 - F12,sysrq键,Scroll Lock键,pausebreak键
    Spring框架两大核心模块(8月5号)
    3分钟教你用Python+Appium实现自动化测试
    MongoDB 安装与配置
    幸福里基于 Flink & Paimon 的流式数仓实践
    入门CubeIDE软件 界面功能说明
    在Linux命令行中查找空目录
    选专业,适合理科女生的大学专业有哪些?
    Vue3 ElementPlus el-cascader级联选择器动态加载数据
    洗衣行业在线预约小程序系统源码搭建 支持直播功能+在线预约下单+上门取件
  • 原文地址:https://blog.csdn.net/yeqinghanwu/article/details/126122542