最近搞 devops 相关的内容,将机房的机器集中起来,方便服务部署,算力集中管理等。在 k8s 等都基本搭建完毕之后,闲暇时间学习下 docker-compose 工作原理。
环境准备
下载 compose 源码, 当前最新版本是 1.23.0
$ git clone https://github.com/docker/compose
然后通过 pycharm 导入到项目
架构图
在 docker-compose 中使用 docker api 的方式来驱动 dockerd, 如上图所示,所有内容均在 Container 中对 docker 常见操作进行封装。然后在 Project / Service 对象中进行调用
执行流程
- 执行 docker-compose 命令时,进入到程序主入口 main() 函数
- 在 main() 函数中调用 dispatch() 函数进行将命令转换为 可执行的对象
a. 构建 DocoptDispatcher 对象, 并解析相关参数置功能基础信息内容
b. 创建 Project 对象,并链接相应的 docker client api
c. 创建 TopLevelCommand 对象,并解析相关的参数配置
- 执行指令内容