DockerCompose支持规范
支持原理
DockerCompose 是 Docker 生态中的一个子项目,它提出了定义多个容器组件守护启动参数或构建方式的一种规范,它主要应用于单机容器化环境场景,类似于容器环境下的 systemd。使用 DockerCompose 定义的多组件组件从通信方式、依赖关系上限制了只能单机部署,这与 Kubernetes 对组件的处理方式有一定区别。如何让 DockerCompose 定义的所有组件能够运行于 Kubernetes 集群中,这就是 Rainbond 提供的基于 DockerCompose 创建组件提供的功能。
用户提供可以正常运行的 DockerCompose 定义文件,Rainbond 将解析此文件并分别读取内部的所有组件的关键配置,包括:组件名称、镜像名称及仓库地址、环境变量、依赖关系(启动顺序)、持久化存储、组件端口。基于这些属性创建 Rainbond 组件抽象,再通过 Rainbond 的组件抽象模型的管理运行机制部署于底层的 Kubernetes 集群。从而实现 DockerCompose 到 Kubernetes 的转化。
其中较为关键的是依赖关系、DockerCompose 中组件之间建立依赖关系使用的是 Docker 的同网络空间原理,结合 Docker 默认的 DNS 组件对依赖组件别名进行域名解析从而实现组件间通信。这种模式在 Kubernetes 场景中无法直接实现,但是基于 Rainbond 的默认 ServiceMesh 机制,就实现了一直的效果,Rainbond dns 组件将解析组件别名到127.0.0.1
, 组件通过别名访问其他组件时,实际就是访问组件本地的代理,本地的 ServiceMesh Sidecar 容器完成组件动态发现和负载均衡。 从效果上看与单机运行的 DockerCompose 是一致的,但是实际上整个应用已经是在集群环境下分布式运行,每一个组件都可以运行多个实例。