#!/bin/bash
#=====================================================
# Docker 监控脚本 - 监控容器资源使用
# 来源: 整合自 Docker 社区最佳实践
# 用法: ./docker-monitor.sh
#=====================================================

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

echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}    Docker 容器监控报告${NC}"
echo -e "${GREEN}========================================${NC}"
echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""

# Docker 信息
echo -e "${YELLOW}[ Docker 信息 ]${NC}"
docker info --format '
  容器: {{.Containers}} (运行中: {{.ContainersRunning}} / 暂停: {{.ContainersPaused}} / 停止: {{.ContainersStopped}})
  镜像: {{.Images}}
  存储驱动: {{.Driver}}
  CPU: {{.NCPU}}
  内存: {{.MemTotal}}' 2>/dev/null || echo "  无法获取"

echo ""

# 容器状态
echo -e "${YELLOW}[ 容器列表 ]${NC}"
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" 2>/dev/null | head -20
echo ""

# 资源使用TOP
echo -e "${YELLOW}[ CPU 使用 TOP 5 ]${NC}"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemPerc}}\t{{.MemUsage}}\t{{.NetIO}}" 2>/dev/null | head -6
echo ""

# 异常容器检查
echo -e "${YELLOW}[ 健康检查 ]${NC}"
UNHEALTHY=$(docker ps -a --filter "status=exited" --filter "status=dead" --format "{{.Names}}" 2>/dev/null)
if [ -n "$UNHEALTHY" ]; then
    echo -e "${RED}  异常容器:${NC}"
    echo "$UNHEALTHY" | while read name; do
        echo "    - $name"
    done
else
    echo -e "${GREEN}  所有容器运行正常${NC}"
fi

echo ""
echo -e "${GREEN}========================================${NC}"