Skip to main content
实战收官:代码写完了,但这只是开发的结束,运维的开始。今天我们将把 Python Master 和 MySQL 数据库装进 Docker 容器,并使用 Docker Compose 进行微服务编排。最后,我们将进行全链路联调,验证这个分布式系统的运作。

学习内容 (30 mins)

为什么不写 Dockerfile?
  • Dockerfile 只能定义一个镜像(比如 Master)。
  • 但我们的系统需要 Master + MySQL 配合工作。
  • Compose 的价值: 它像一个剧本(YAML),定义了所有角色(Services)、它们之间的关系(Depends_on)、网络(Networks)和数据卷(Volumes)。
启动顺序的坑
  • 问题: 如果你在 Compose 里写了 depends_on: db,Docker 只会保证 db 容器启动了就启动 master。但 db 容器启动不代表 MySQL 进程准备好接客了(可能还在初始化数据)。这会导致 Master 连接由于 Connection Refused 崩溃。
  • 解决: 使用 healthcheck。Docker 会定期 ping 数据库,直到数据库返回 “I’m OK”,由于配置了 condition: service_healthy,Master 才会正式启动。这是一个生产级的最佳实践。

交付任务 (90 mins)

1

步骤 1: 容器化 Master 服务

master/ 目录下编写 Dockerfile
2

步骤 2: 编写编排文件

在项目根目录 ~/final-project/ 创建 docker-compose.yaml
3

步骤 3: 全链路联调 (The Final Run)

这是见证奇迹的时刻。
验证检查清单:
  • Master 日志:显示 CREATE TABLE 相关 SQL,无报错。
  • Agent 终端:持续输出 ✅ Sent
  • 浏览器:访问 http://localhost:8000/api/v1/top,能看到刚刚上报的数据(ID 应该是递增的)。
  • 数据流转:CPU 负载变化时,API 返回的值也跟着变化。
常见错误
  • Access denied for user ‘root’: 检查 docker-compose.yaml 里的密码和 Master 代码里的连接串密码是否一致。
  • Connection Refused: 可能是数据库还没启动完成 Master 就抢跑了。检查 healthcheck 配置是否生效。
  • Docker 网络不通: 确保 master 和 db 在同一个 compose 文件里,或者手动指定了 network。

拓展任务 (30 mins)

Agent 要不要容器化?

思考:为什么我们不把 Agent 也写进 docker-compose?答案: 不建议。监控 Agent 主要是采集宿主机的 CPU/磁盘。如果放在容器里,默认看到的是容器内的环境。如果要采集宿主机,需要挂载 /proc/sys 并开启 pid: host 模式,这反而增加了部署复杂度。对于 Agent,直接跑二进制最简单。

可视化进阶

挑战:JSON 数据不好看,老板要看图表。任务:在 compose 里加一个 Grafana 服务。配置 MySQL 数据源,直接读 monitor_system 库,画一个 CPU 曲线图。这就真的变成商业级产品了。

🎓 30 天毕业致辞:你的蜕变

Congratulations! 🎉

在过去的 30 天里,你完成了从“脚本小子”到“全栈运维开发”的蜕变:
  1. Week 1 (基石): 掌握 Shell 自动化与 SQL 数据设计。
  2. Week 2 (Python): 学会用 Python 处理复杂逻辑与 ChatOps。
  3. Week 3 (API): 掌握 FastAPI 构建标准 Web 服务。
  4. Week 4 (Go): 突破性能瓶颈,掌握高并发与二进制分发。
  5. Week 5 (Fusion): 亲手缝合了这一切,构建了一个完整的分布式监控系统。
Keep building, keep learning. 未来的架构师,加油!

回顾本周

第 05 周 | 终极融合

回到首页

查看完整知识图谱