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 |
將執行的結果寫入到指定的日誌中