实战收官:代码写完了,但这只是开发的结束,运维的开始。今天我们将把 Python Master 和 MySQL 数据库装进 Docker 容器,并使用 Docker Compose 进行微服务编排。最后,我们将进行全链路联调,验证这个分布式系统的运作。
学习内容 (30 mins)
1. Docker Compose 编排 (15 mins)
1. Docker Compose 编排 (15 mins)
为什么不写 Dockerfile?
- Dockerfile 只能定义一个镜像(比如 Master)。
- 但我们的系统需要 Master + MySQL 配合工作。
- Compose 的价值: 它像一个剧本(YAML),定义了所有角色(Services)、它们之间的关系(Depends_on)、网络(Networks)和数据卷(Volumes)。
2. 容器健康检查 (Healthcheck) (15 mins)
2. 容器健康检查 (Healthcheck) (15 mins)
启动顺序的坑
- 问题: 如果你在 Compose 里写了
depends_on: db,Docker 只会保证 db 容器启动了就启动 master。但 db 容器启动不代表 MySQL 进程准备好接客了(可能还在初始化数据)。这会导致 Master 连接由于 Connection Refused 崩溃。 - 解决: 使用
healthcheck。Docker 会定期 ping 数据库,直到数据库返回 “I’m OK”,由于配置了condition: service_healthy,Master 才会正式启动。这是一个生产级的最佳实践。
交付任务 (90 mins)
拓展任务 (30 mins)
Agent 要不要容器化?
思考:为什么我们不把 Agent 也写进 docker-compose?答案:
不建议。监控 Agent 主要是采集宿主机的 CPU/磁盘。如果放在容器里,默认看到的是容器内的环境。如果要采集宿主机,需要挂载
/proc、/sys 并开启 pid: host 模式,这反而增加了部署复杂度。对于 Agent,直接跑二进制最简单。可视化进阶
挑战:JSON 数据不好看,老板要看图表。任务:在 compose 里加一个 Grafana 服务。配置 MySQL 数据源,直接读
monitor_system 库,画一个 CPU 曲线图。这就真的变成商业级产品了。🎓 30 天毕业致辞:你的蜕变
Congratulations! 🎉
在过去的 30 天里,你完成了从“脚本小子”到“全栈运维开发”的蜕变:
- Week 1 (基石): 掌握 Shell 自动化与 SQL 数据设计。
- Week 2 (Python): 学会用 Python 处理复杂逻辑与 ChatOps。
- Week 3 (API): 掌握 FastAPI 构建标准 Web 服务。
- Week 4 (Go): 突破性能瓶颈,掌握高并发与二进制分发。
- Week 5 (Fusion): 亲手缝合了这一切,构建了一个完整的分布式监控系统。
回顾本周
第 05 周 | 终极融合
回到首页
查看完整知识图谱