docker 默认安装路径为/var/lib/docker/,当docker用过一段时间后发现/var/lib/docker/overlay2 占用很大,就需要清理Docker占用的磁盘空间,将目录/var/lib/docker 目录迁移到较大的磁盘上
查看磁盘使用情况
# du -hs /var/lib/docker/ |
查看Docker的磁盘使用情况,docker system df命令,类似于Linux上的df命令,
# docker system df |
迁移/var/lib/docker目录
首先需要停止docker服务。
#systemctl stop docker |
创建新的docker目录,执行命令df -h,找一个大的磁盘。 我在 /home目录下面建了 /home/docker/lib目录
#mkdir -pv /home/docker/lib |
迁移/var/lib/docker目录下面的文件到 /home/docker/lib
#rsync -avz /var/lib/docker /home/docker/lib/ |
配置 /etc/systemd/system/docker.service.d/devicemapper.conf。查看 devicemapper.conf 是否存在。如果不存在就新建。
#mkdir -p /etc/systemd/system/docker.service.d/ #vim /etc/systemd/system/docker.service.d/devicemapper.conf |
然后在 devicemapper.conf 写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在 /home/docker/lib/docker )
[Service] ExecStart= ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker |
重新加载 docker
#systemctl daemon-reload #systemctl restart docker #systemctl enable docker |
为了确认一切顺利,运行
#docker info |
命令检查Docker 的根目录.它将被更改为 /home/docker/lib/docker
启动成功后,再确认之前的镜像还在
确定容器没问题后删除/var/lib/docker/目录中的文件
docker日志的大小增加的很快,我们可以用以下脚本做定期清理.
#vim clear_docker_logs.sh
#!/bin/bash
echo 'input log file size '$1
default=20
if [ -n "$1" ]
then
default=$1
fi
max=`expr 1024 \* $default`
echo 'current set file size '$max
for file in ` ls /home/docker/lib/docker/containers/*/*-json.log `
do
#echo $file
s=`du -k $file |awk '{print $1}'`
# echo $s
if [ $s -gt $max ]
then
echo 'remove'$file
truncate -s 0 $file
echo 'removed'$file
fi
done
测试脚本
chmod +x clear_docker_logs.sh
./clear_docker_logs.sh 20
加入crontab 每隔半小时清理日志
#crontab -e */30 * * * * /bin/sh /data/docker/docker_logs.sh 20 >> /root/mylog.log 2>&1 |
将执行的结果写入到指定的日志中