#!/bin/bash
#=====================================================
# Docker 清理脚本 - 清理无用的镜像/容器/卷
# 来源: 整合自 Docker 社区最佳实践
# 用法: ./docker-cleanup.sh [all|images|containers|volumes]
#=====================================================

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

if ! command -v docker &>/dev/null; then
    echo -e "${RED}Docker 未安装${NC}"
    exit 1
fi

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}    Docker 空间清理工具${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""

# 清理前统计
echo -e "${YELLOW}[清理前]${NC}"
echo "  镜像: $(docker images -q 2>/dev/null | wc -l) 个"
echo "  容器: $(docker ps -aq 2>/dev/null | wc -l) 个"
echo "  卷:   $(docker volume ls -q 2>/dev/null | wc -l) 个"
echo ""

clean_all() {
    echo -e "${YELLOW}清理退出的容器...${NC}"
    docker container prune -f 2>/dev/null

    echo -e "${YELLOW}清理悬空镜像 (dangling)...${NC}"
    docker image prune -f 2>/dev/null

    echo -e "${YELLOW}清理未使用的镜像...${NC}"
    docker image prune -a -f 2>/dev/null

    echo -e "${YELLOW}清理未使用的卷...${NC}"
    docker volume prune -f 2>/dev/null

    echo -e "${YELLOW}清理构建缓存...${NC}"
    docker builder prune -f 2>/dev/null
}

clean_images() {
    echo -e "${YELLOW}清理未使用的镜像...${NC}"
    docker image prune -a -f 2>/dev/null
}

clean_containers() {
    echo -e "${YELLOW}清理退出的容器...${NC}"
    docker container prune -f 2>/dev/null
}

clean_volumes() {
    echo -e "${YELLOW}清理未使用的卷...${NC}"
    docker volume prune -f 2>/dev/null
}

case "${1:-all}" in
    all)        clean_all ;;
    images)     clean_images ;;
    containers) clean_containers ;;
    volumes)    clean_volumes ;;
    *)
        echo "用法: $0 [all|images|containers|volumes]"
        exit 1
        ;;
esac

# 清理后统计
echo ""
echo -e "${YELLOW}[清理后]${NC}"
echo "  镜像: $(docker images -q 2>/dev/null | wc -l) 个"
echo "  容器: $(docker ps -aq 2>/dev/null | wc -l) 个"
echo "  卷:   $(docker volume ls -q 2>/dev/null | wc -l) 个"

# 磁盘使用
echo ""
echo -e "${GREEN}Docker 磁盘使用:${NC}"
docker system df 2>/dev/null

echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}  清理完成${NC}"
echo -e "${GREEN}========================================${NC}"