清理日志:

如下目录是docker的日志文件:有时会很大达到几十个G。

cd /var/lib/docker/containers
06f1bdf54fbad730ed5ea8401a2137f52f0b1029875525233e2b0aeae22a22e1-json.log

清理即可:如果容器在运行期间不可直接删除,而只能清空文件。

cat /dev/null > 06f1bdf54fbad730ed5ea8401a2137f52f0b1029875525233e2b0aeae22a22e1-json.log

自动清理脚本:

find /var/lib/docker/containers/*/*.log -type f -exec sh -c 'cat /dev/null > "{}"' \;

方法2:

#!/bin/bash

set -x

export LOGPATH=/var/lib/docker/containers

for var in `ls $LOGPATH`
do
    size=`du -sm $LOGPATH/$var | awk '{print $1}'`
    if [ $size -gt 1024 ]; then
        du -sh $LOGPATH/$var/$var-json.log
        cat /dev/null > $LOGPATH/$var/$var-json.log
    fi
done

限制docker日志文件大小:

max-file: "3",意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json

max-size: "1g",滚动前日志的最大大小。一个正整数加上一个代表测量单位(k,m 或 g)的修饰符。默认为 -1(无限制)。

vim /etc/docker/daemon.json
{
  "log-driver":"json-file",
  "log-opts": {"max-size":"20m", "max-file":"3"}
}

重启docker:

systemctl daemon-reload
systemctl restart docker


清理其他空间:

查看docker占用的磁盘空间:

$docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              33                  33                  6.363GB             669.6MB (10%)
Containers          74                  49                  -74B                -25B
Local Volumes       7                   0                   12.68kB             12.68kB (100%)
Build Cache                                                 0B                  0B


$docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              33                  18                  6.363GB             3.821GB (60%)
Containers          49                  49                  -49B                0B
Local Volumes       7                   0                   12.68kB             12.68kB (100%)
Build Cache                                                 0B                  0B

清理:

docker system prune
docker system prune -a # 暂时关闭的容器镜像也会删除

参考:

blog.fundebug.com/2018/01/10/how-to-clean-docker-disk/


定时任务清理:

#!/bin/bash

export DIR=/var/lib/docker/containers
export BIG_DIR_LIST=`du -sh $DIR/* | grep G| awk '{print $2}'`


for var in $BIG_DIR_LIST
do
    log_dir_name=`basename $var`
    big_log_file=$DIR/$log_dir_name/$log_dir_name'-json.log'
    if [ -f $big_log_file ]; then
        cat /dev/null > $big_log_file
        echo "cat /dev/null > $big_log_file" >> /tmp/clear.log
    fi
done


设置文件系统类型:

vim /etc/docker/daemon.json 
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}


指定数据目录:存放docker镜像等数据。

{
  "data-root": "/data/docker"
}



清理aws eks节点中不使用的镜像


启动docker:docker主要用来拉取pause镜像,清理镜像时会把pause镜像一起清除,因为ctr工具无法登陆aws,需要使用docker登陆并下载pause镜像

systemctl status docker
systemctl start docker
systemctl status docker

登陆镜像仓库:

aws ecr get-login-password --region us-west-1 | docker login --username AWS --password-stdin 602401143452.dkr.ecr.us-west-1.amazonaws.com
docker pull 602401143452.dkr.ecr.us-west-1.amazonaws.com/eks/pause:3.5
docker save -o pause:3.5.tar.gz 602401143452.dkr.ecr.us-west-1.amazonaws.com/eks/pause:3.5

导出镜像:

ctr -n k8s.io image export pause:3.7.tar vke-cn-shanghai.cr.volces.com/vke/pause:3.7

停止docker服务:

systemctl stop docker.socket

保存下载的pause镜像:

ctr -n k8s.io import pause:3.5.tar.gz

安装crictl工具,用来清除镜像

curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.22.0/crictl-v1.22.0-linux-amd64.tar.gz | tar -C /usr/local/bin -zxvf -

清理不用的镜像:

crictl rmi --prune
# pause镜像也会被清理,所以要手动导入
ctr -n k8s.io images import pause\:3.5.tar.gz
ctr -n k8s.io images ls | grep pause