是否有使用环境变量来控制Docker行为的原生或常用方法,即以12种方式?
我见过的唯一与语言无关的方法是使用-e变量污染docker run命令.我见过的最易维护的解决方案是使用cat和sed的组合来使用.env文件生成CLI参数:https://twitter.com/DataKyle/status/422843345120296960
我们目前使用Vagrant for dev,一个用于测试和部署的CI/CD托管提供程序,以及AWS Elastic Beanstalk作为登台和生产PAAS.我们的应用程序有超过100个可配置参数,其中大多数都设置为默认值,但每个环境仍需要自定义大约10-20个.使用像这样的大量命令行变量来运行docker似乎太麻烦了.
此外,它不允许您从docker主机(例如CI提供程序预先安装的Redis或Postgres凭据)中获取变量,而无需进一步破解.
我有没有找到解决方案?或者这是Docker的缺失部分?或者这是否在某种程度上哲学上反对Docker哲学?
在关于端口绑定的12 Factor文章 http://12factor.net/port-binding中,要求每个应用程序都是自包含的,并且没有注入运行时,例如Tomcat.出于什么原因建议...微服务的自包含应用程序的优点是什么?
我正在尝试找出 Web 应用程序配置的最佳方法。目标是:
根据12 因素应用程序Web 应用程序配置最好在环境变量中提供。它简单而灵活,但看起来有一些与此相关的安全问题。
另一种方法是将所有配置作为命令行参数传递。这对操作系统来说又是简单、灵活和自然的,但整个配置然后在主机的进程列表中可见。这可能是也可能不是问题(我不是操作系统专家),但解决方案至少很麻烦。
流行的Dropwizard框架采用了一种混合方法,其中命令行参数指定配置文件的位置,然后从那里读取配置。问题是它打破了对我的配置(本地文件)的位置做出假设的灵活性约束。它还使我的应用程序实现文件访问,虽然在大多数语言/框架/库中通常很容易实现,但本质上并不简单。
我正在考虑另一种方法,即在应用程序的stdin. 最终cat my-config-file.yml | ./my-web-app,在本地存储文件甚至wget https://secure-config-provider/my-config-file.yml | ./my-web-app. 管道看起来很简单并且是操作系统进程的本机。它似乎非常灵活,并且将配置如何提供给主机操作系统的问题分开了。
问题是它是否符合安全约束。假设一旦管道内容被消费它就永久消失是否安全?
我无法用谷歌搜索任何尝试这个的人,因此这个问题。
我参考了Twelve-Factor应用程序"宣言",可以在这里找到:http://12factor.net
在第八个因素中,作者写道:
十二因素应用程序进程永远不应该守护或写入PID文件.相反,依靠操作系统的流程管理器(例如Upstart,云平台上的分布式流程管理器或开发中的Foreman等工具)来管理输出流,响应崩溃的流程,以及处理用户启动的重启和关闭.
我不确定这里的意思是" 流程永远不应该守护 ".
有人可以解释守护进程的优缺点 - 特别是在java进程的上下文中吗?此外,进程管理器不能管理守护进程吗?
我最近发现了https://12factor.net/-除日志记录要求外,一组生产环境要求看起来非常合理。
https://12factor.net/logs表示日志应转到STDOUT。WAT?为什么?
最近7年以来,我主要从事管理工作,一定错过了一些东西。但是我确实清楚地记得那STDERR是为达到这个确切目的而设计的-单独作为诊断信息流。它已经使用了数十年。
为什么要打破常规?
我确实记得默认情况下所有HTTP服务器都配置为将STDOUT发送到浏览器(客户端),并将STDERR发送到日志文件。到处都是。对于大多数环境而言,这是显而易见的默认设置。我的第一个想法是他们认为12因子标准的作者犯了一个错误。
我想念什么?为什么要将日志发送到STDOUT?
请不要告诉我,现代的Web应用程序没有“正常输出”。首先,他们这样做了,其次,这并不符合打破数十年来一直有效且仍然完全符合目的的惯例的理由。
非常感谢您的想法。谢谢。
如果微服务是可扩展的,例如部署为 AWS 上的 ECS,那么在微服务开发中是否应该使用并行编程?
如果是,那么与 N 个实例消耗相同资源相比,一个实例消耗更多资源有什么好处?
并行编程如何匹配https://12factor.net/
PS 更具体地说 - 我应该在概念上使用并行流而不是简单流吗?
java parallel-processing multithreading scalability 12factor
阅读 12 因子应用程序的配置部分:https : //12factor.net/config它指出“另一种配置方法是使用未签入版本控制的配置文件”。相反,“十二因素应用程序将配置存储在环境变量中”如果不在源/修订控制中存储配置,那么环境变量的配置应该存储在哪里?
例如,一个新开发人员加入了一个团队,该开发人员如何访问环境变量以运行应用程序?是否假设提供了一个包含允许应用程序运行的变量的环境?
我在查看 12 因素应用原理时看到了这样的说法。我相信这个声明指出应用程序必须响应任何支持服务(例如数据库或消息代理)并连接到它们,无论它们是什么。它与传统的连接方式有何不同?例如:在我的微服务中,我将数据库和 kafka 代理定义为用户在云铸造厂中提供的服务。它只是提供连接参数作为 vcap 服务变量。我仍然有连接到完全不同的数据库和 kafka 代理的代码。这个说法意味着什么?它与我们在非云环境中所做的有何不同?
我正在阅读12-factor-app 宣言,现在正处于依赖项部分。\n不过,依赖隔离是我无法理解的。
\n不幸的是,除了 12-factor-apps 应该“在执行期间使用依赖项隔离工具以确保没有隐式依赖项 \xe2\x80\x9cleak in\xe2\x80\x9d周边系统”。
\n在寻找答案时,我只是找到有关如何在特定语言/框架中实现依赖项隔离的问题。
\n也许这只是我对英语理解的限制,但有人可以启发我吗?
\n12factor ×10
java ×2
spring-boot ×2
architecture ×1
cloud ×1
config ×1
daemon ×1
dependencies ×1
docker ×1
dotenv ×1
isolation ×1
linux ×1
logging ×1
paas ×1
pipe ×1
scalability ×1
security ×1