容器的AI原生自动缩放(基于Docker的AI堆栈构建)
使用LLM和MCP监控和扩展Docker Compose服务的自治SRE代理。
](https://docs.docker.com/compose/)   
______________________________________________________________________
🚀 快速开始
先决条件:Docker桌面+模型运行器、cagent、Go 1.21+(参见 安装)
自主守护程序模式(推荐)
对于全自动24/7操作,无需用户干预:
# 1. Clone and build
git clone https://github.com/hwclass/docktor
cd docktor
go build -o docktor ./cmd/docktor
# 2. Start autonomous daemon (auto-scales automatically)
./docktor daemon start
# 3. Generate load to trigger scaling (in another terminal)
# Option A: Incremental load simulator (recommended for demos)
bash examples/single-service/load-incremental.sh
# Option B: Quick test - instant high load (90 seconds)
bash examples/single-service/load-quick.sh
# 4. Monitor daemon in real-time
./docktor daemon logs
# 5. Check status
./docktor daemon status
# 6. Stop daemon when done
./docktor daemon stop高级选项:
# Custom compose file and service
./docktor daemon start --compose-file ./production.yaml --service api
# Manual mode (requires approval for each action)
./docktor daemon start --manual互动模式(用于学习)
对于具有聊天界面的交互式探索,需要用户干预:
# 1. Run Docktor (opens cagent TUI)
./docktor ai up
# 2. In the TUI, send a message to start autoscaling:
# Type: "Start autoscaling web service now"
# 3. Generate load (in another terminal)
bash examples/load-cpu.sh
# 4. Watch containers scale
bash examples/watch.sh模式比较:
- Daemon(推荐):完全自主,在后台运行,无需用户输入
- 交互式:手动聊天界面,有助于学习如何做出决策
📖 完整的测试指南:参见 AUTOSCALE_GUIDE.md
______________________________________________________________________
📦 Docker镜像(构建并推送到Docker Hub)
构建容器镜像(包括docker+compose CLI,以便Docktor可以扩展主机):
export IMAGE=scalingdocktor/docktor:latest
docker build -t "$IMAGE" .推送到Docker Hub:
docker login
docker push "$IMAGE"从镜像运行Docktor(挂载你的compose文件、配置和Docker套接字):
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/docktor.yaml:/app/docktor.yaml \
-v $(pwd)/docker-compose.yaml:/app/docker-compose.yaml \
"$IMAGE" daemon start --config /app/docktor.yaml对于多拱(如果使用buildx):
docker buildx build --platform linux/amd64,linux/arm64 -t "$IMAGE" . --push______________________________________________________________________
⚙️ 配置
Docktor使用 docktor.yaml 用于每个应用程序的缩放配置。这允许在不更改代码的情况下自定义阈值。
配置示例
# docktor.yaml
version: "1"
service: web
compose_file: docker-compose.yaml
scaling:
cpu_high: 75.0 # Scale up when CPU >= 75%
cpu_low: 20.0 # Scale down when CPU "
value: 75.0
scale_down_when:
- metric: cpu.avg
op: ""
value: 500
- metric: queue.rate_in
op: ">"
value: 200
scale_down_when:
# AND logic: scale only if ALL conditions match
- metric: queue.backlog
op: " 80%: scale up (+2)
If CPU 80%, scale up
Calling apply_scale(service: "web", target_replicas: 4, reason: "CPU high at 89.3%")
→ SUCCESS: scaled web from 2 to 4示例3:健康范围→ Hold
Calling get_metrics(container_regex: "web", window_sec: 30)
→ {"examples-web-1": 45.2, "examples-web-2": 52.1}
Agent analyzes:
- Current replicas: 2
- Average CPU: 48.6%
- Decision: 20% 80%: scale up (+2 replicas)
- If avg CPU Hold off on scaling for 10 minutes, running tests
> Why did you scale to 4 replicas?
> Be more aggressive with scaling today第二阶段:Web界面
- \[ \] 本地Web UI:在本地主机上运行的基于浏览器的聊天界面
- 实时聊天的React/Vue前端 - 实时指标仪表板,显示CPU、副本、决策 - 缩放事件的视觉时间线 - 自然语言命令的聊天面板 - 例子: http://localhost:3000 → Docktor控制面板
- \[ \] 决策评审模式:缩放前的视觉审批工作流程
- 代理人建议:“从2开始→ 5 (CPU为87%)” - 用户点击:\[批准\]\[拒绝\]\[修改\] - 从模式中学习:记住批准/拒绝
第三阶段:情报
- \[ \] 具有历史决策记忆的RAG:从过去的缩放决策中学习
- DuckDB+VSS插件:使用向量嵌入存储所有决策 - 查询类似的过去情况:“上次CPU达到85%时发生了什么?” - 模式识别:“周一早上总是需要6+个复制品” - 上下文感知决策:“上周负载相似,扩展到5运行良好” - 可解释的人工智能:“我之所以扩大规模,是因为3个类似的案例显示了性能问题” - 数据库架构:
CREATE TABLE decisions (
timestamp TIMESTAMP,
metrics JSON, -- CPU, memory, replicas at decision time
action VARCHAR, -- scale_up, scale_down, hold
from_replicas INT,
to_replicas INT,
reason TEXT,
outcome TEXT, -- success, rolled_back, user_overridden
embedding FLOAT[384] -- Vector for similarity search
);- 聊天UI集成:“告诉我你为什么做出这个决定”→ 类似案例的矢量搜索
- \[ \] 从反馈中学习:代理记住用户首选项
- 跟踪用户覆盖的决策 - 根据模式调整未来的行为 - “用户总是喜欢在周五进行保守的缩放”
- \[ \] 自然语言政策:用简明英语定义规则
- “在工作时间(上午9点至下午5点),切勿将比例降至2以下” - “宁愿扩大规模,也不愿降低性能” - “无论负载如何,最多8个副本” - 自动存储和执行策略
集成与可观察性
- \[ \] Docker桌面扩展:带有交互式控件的可视化仪表板
- \[ \] 网页用户界面:基于浏览器的控制面板,具有实时聊天功能
- \[ \] 普罗米修斯出口:监测系统的指标
- \[ \] 警报集成:松弛/不协调通知和命令
- \[ \] Webhook支持:触发外部事件的缩放
______________________________________________________________________
贡献
欢迎投稿!需要帮助的领域:
- 代理改进:帮助使cagent守护进程模式更加稳定
- 其他指标:内存、网络、自定义指标
- 更好的配方:更智能的缩放计算
- 文档:教程、示例、用例
- 测试:更多负载场景,边缘情况
______________________________________________________________________
许可证
MIT许可证-请参阅 许可证 文件
_免责声明:Docktor是一个由社区构建的独立开源项目。它不隶属于或认可Docker,股份有限公司。_
______________________________________________________________________
学分
内置:
______________________________________________________________________
Docktor -因为你的容器值得一位人工智能医生🩺🤖
