关于docker的配置文件与环境变量的小发现
###### 核心内容:使用官方镜像前,一定要拜读它官方自带的description;
使用官方镜像前,一定要拜读它官方自带的description;作为众人认可的官方镜像,你未来遇到的大部分问题,很大可能都在这里预置了解决方案。仔细看docker自带官方描述,让你对docker的使用更顺利。
最近初初接触docker,发现有一点在使用时很不方便,就是配置文件的修改。经过一番波折,终于解决了该问题。
例如emqx的镜像,plugins/emqx_auth_mysql.conf配置文件中的mysql连接信息等配置,是需要根据部署环境不同而变化的,不能写死在镜像中
解决方案1:通过挂载外部emqx_auth_mysql.conf替换容器内文件,可以解决问题。但总觉得把整个配置文件暴露在外不方便,且让运维人员维护复杂文件中一个值会增加工作难度
解决方案2:重新打包emqx镜像,增加shell脚本,通过sed命令替换指定变量;启动镜像时通过变量名传递要修改的配置。
但shell脚本编写sed替换总是遇到各种麻烦时,且菜鸟写的dockerfile文件缺失也很菜,无端引入很多坑。
同时,通过变量传递的值有时会莫名其妙替换掉一些关键配置。
后来仔细研究发现docker自身会留出一些变量设置,方便用户通过变量向配置文件中传递值。这就方便快捷的解决了配置文件关键参数修改的问题,同时也解释了为什么一些核心参数值莫名被修改问题,因为你的变量名正好使用了docker预留的变量名。
-----------------------------------关键内容来了------------------------------------------
如何了解docker镜像提供了哪些环境变量,看官方,看官方,看官方,重要的事说三遍,不要百度盲目搜搜搜
https://hub.docker.com/r/emqx/emqx
继续往下翻
如何使用变量修改配置文件,详细描述
强调一点,当然如果你的配置文件太复杂,使用挂载更方便,仍可以继续使用。解决方案千千万,选择最合适的就好。