1.Cretae a clean_docker_containers.sh to clean containers (status: exited, dead)
bash
#!/bin/bash
# 找到所有状态不正常的容器
containers=$(docker ps -a --filter "status=exited" --filter "status=dead" --format "{{.ID}}")
if [ -z "$containers" ]; then
echo "No containers to clean."
else
echo "Cleaning up the following containers:"
echo "$containers"
echo
for container in $containers; do
echo "Deleting container $container"
docker rm -f $container
done
fi
# 设置 Cron Job:crontab -e
- Create a delete_docker_images.sh to delete images with keyword.
bash
#!/bin/bash
# 检查是否提供了关键词参数
if [ "$#" -ne 1 ]; then
echo "Usage: $0 <keyword>"
exit 1
fi
# 关键词参数
KEYWORD=$1
# 找到所有包含关键词的镜像
images=$(docker images --format "{{.Repository}}:{{.Tag}}" | grep ${KEYWORD})
if [ -z "$images" ]; then
echo "No images found with keyword: ${KEYWORD}"
else
echo "Images to be deleted:"
echo "$images"
echo
for image in $images; do
echo "Deleting image $image"
docker rmi -f $image
done
fi
- Create a run_clean_docker.sh to run these shell command as above.
bash
#!/bin/bash
# SET PATH
cd /your-parth/Docker
# 定义日志文件
LOGFILE="./cron.log"
# 记录时间和作者
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Delete Docker Images and Container Script executed" >> ${LOGFILE}
# 运行原先的脚本,并将输出写入日志
./delete_docker_images.sh /your-keyword/ >> ${LOGFILE} 2>&1
./clean_docker_containers.sh >> ${LOGFILE} 2>&1
echo "[$(date '+%Y-%m-%d %H:%M:%S')] End" >> ${LOGFILE}
echo "" >> ${LOGFILE}
- Set a cron job
4.1 crontab -e
bash
# 第一颗星表示分钟(0-59)第二颗星表示小时(0-23)第三颗星表示一个月中的天(1-31)
# 第四颗星表示月份(1-12)第五颗星表示一周中的天(0-7,星期天可以是0或7)
# 每天8時定期清理 docker images by keyword & container
0 8 * * * /your-path/Docker/run_clean_docker.sh
4.2 cron.log
html
[2024-11-28 08:00:01] Delete Docker Images and Container Script executed
No images found with keyword: /ccs/
No containers to clean.
[2024-11-28 08:00:01] End