@
ns2250225 顺便再说一句我们为什么不需要考虑各个项目配置文件的不同,在 Docker 下是如何协作的
1. 为什么不需要考虑各个项目配置文件的不同,confd 模板文件我们并没有采用网上大部分的配置文件+kv 组合的方式,而是整个配置文件模板是一个 value,也就是说把配置文件的所有内容都存在一个 etcd 的 kv 中,而非存储配置文件中的个别内容,如下:
```
# cat /etc/confd/templates/nginx.conf.tmpl
{{getv "/conf/project/env/nginx/nginx.conf"}}
```
2. Docker 下的协作方式,我们是采用基础镜像+项目代码组成项目镜像的方式运行的,基础镜像包含项目的基础环境,其中就有 confd 服务,confd 服务有一个通用的 toml 配置,例如:
```
# cat /etc/confd/conf.d/nginx.conf.toml
[template]
src = "nginx.conf.tmpl"
dest = "/tmp/nginx.conf"
keys = [
"/conf/$PROJ/$ENVT/nginx/nginx.conf",
]
check_cmd = "/usr/sbin/nginx -t -c {{.src}}"
reload_cmd = "/usr/sbin/service nginx reload"
```
在启动 Docker 的时候加两个环境变量,PROJ 和 ENVT 分别表示当前运行的项目和环境,confd 根据上边的配置加上这两个变量信息自动去 etcd 里边找到对应的 key,拿 value 填充到 1 中的模板文件中
所以整个配置文件的更新过程,我们都只需要关心 kerrigan 里的内容,其他的都不需要关心,全部自动完成。