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

将执行的结果写入到指定的日志中