Docker清理磁盘空间

Docker清理磁盘空间

在日常运维当中,Docker会产生一些运行时的临时文件,我们需要定时的清理掉他们,不然将会对磁盘造成极大的压力。

探查命令

查看整个Docker系统的磁盘占用情况:

shell 复制代码
docker system df

查看每一个Docker容器和镜像的磁盘占用情况:

shell 复制代码
docker system df -v

查看系统整体的磁盘占用情况:

shell 复制代码
df -h

查看当前文件夹下所有子文件夹的磁盘占用情况:

shell 复制代码
du -ah --max-depth=1

# 按照文件大小从大到小排序
du -ah --max-depth=1 .|sort -hr

查看当前文件夹以及所有子文件夹的磁盘占用汇总:

shell 复制代码
du -sh *

# 按照文件大小从大到小排序
du -sh *|sort -nr

Docker命令常规清除

清除掉Docker的:停止的容器、无用镜像、缓存、挂载数据 (这条命令需要谨慎,因为暂时停止的容器也会被干掉)

shell 复制代码
sudo docker system prune -a

清除掉无用的镜像:

shell 复制代码
sudo docker image prune -f

清除掉无用的容器:

shell 复制代码
docker container prune - f

清除掉无用的数据卷:

shell 复制代码
docker volume prune - f

清除掉无用的网络:

shell 复制代码
docker network prune - f

清除掉Build的缓存:

shell 复制代码
sudo docker builder prune -f

清除掉/var/lib/docker/containers下的日志文件

占据磁盘空间的主要是以下文件:

bash 复制代码
/var/lib/docker/containers/<container id>/<container id>-json.log

这个应该是容器的日志(非容器内部运行日志)。可以使用以下脚本进行清除:

bash 复制代码
#!/bin/bash
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker containers logs ========"

清除掉/var/lib/docker/overlay2/下的日志文件

bash 复制代码
#!/bin/bash
echo "======== start clean docker overlays logs ========"
logs=$(find /var/lib/docker/overlay2/ -name *.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker overlays logs ========"

这个文件夹下面的文件是容器实质内容物的存放地。所以,这下面的增量文件也应该是容器内程序的运行时日志等。

集大成者清理脚本

bash 复制代码
#!/bin/bash

sudo docker image prune -f
sudo docker builder prune -f

echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker containers logs ========"

echo "======== start clean docker overlays logs ========"
logs=$(find /var/lib/docker/overlay2/ -name *.log)
for log in $logs
        do
                echo "clean logs : $log"
                cat /dev/null > $log
        done
echo "======== end clean docker overlays logs ========"

参考资料

相关推荐
咖啡八杯3 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
掘金码甲哥3 小时前
这块终端神器, 必须吹爆!
后端
糖果店的幽灵3 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
Csvn4 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
一叶龙洲5 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
码事漫谈6 小时前
告别数据孤岛与AI“水土不服”:金仓多模融合时序库如何让数据真正服务于业务
后端
IT_陈寒6 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
星栈7 小时前
Node 接口该写同步还是异步?
后端·node.js
敖行客 Allthinker7 小时前
Parallels Ubuntu虚拟机项目如何让手机访问?完整解决方案
linux·运维·ubuntu
红烧大青虫7 小时前
HarmonyOS应用开发实战:小事记 - UIAbility 的冷启动/热启动/后台启动三种场景与 launchParam 解析
后端·华为·harmonyos·鸿蒙系统