Docker的12factorconfiguration方法

是否还有任何本地或普遍接受的方法来使用环境variables来控制Docker的行为,即以12因子的方式?

我所看到的唯一的语言不可知方法是用-evariables来污染docker run命令。 我见过的最可维护的解决scheme是使用cat和sed的组合来使用.env文件生成CLI参数: https ://twitter.com/DataKyle/status/422843345120296960

我们目前使用Vagrant for dev,一个CI / CD托pipe供应商进行testing和部署,另外还使用AWS Elastic Beanstalk作为分段和生产PAAS。 我们的应用程序有超过100个可configuration的参数,其中大部分被设置为默认值,但是每个环境仍然需要定制大约10-20个参数。 这似乎太hacky运行docker,像这样的命令行variables的巨大列表。

此外,它不允许您从docker主机(例如,CI提供程序的预安装的Redis或Postgres凭据)中获取variables,而无需进一步破解。

有没有解决这个我没有find? 或者这是Docker的缺失? 或者,这在哲学上反对Docker哲学?

Docker 0.10.0及更高版本(2014年4月8日)接受docker run --env-file <filename> ,它可以让.env的运行环境提供.env的文件。

此外,您可以让--volumes-from进一步交互:– --volumes-from可以从引用的容器中挂载所有卷,而--link允许容器知道引用的容器的公开端口的详细信息。

虽然Docker运行引用目前有点弱,但您可以在CLI引用的运行部分以及容器链接引用中find所有的细节。

至于什么从容器开始。 通常我build议启动一个shell脚本,它设置默认的环境variables(沿着: ${ENV:=default_value} ),导出它们,然后exec一个单一的可执行文件。 这个可执行文件可以是前台所需的应用程序,也可以是runitsupervisord类的init替代runit

我不build议在docker中运行sshd ,如果它不是系统的一部分(例如,gitlab的容器应该包含sshd,因为它提供了通过ssh的git repo访问)。 出于维护或debugging的目的,我推荐使用nsenter

Interesting Posts