在docker中对流程进行后台监控是最佳做法吗?
许多最佳实践指南强调将您的进程设置为守护进程,并让某些人监视它以在出现故障时重新启动。这在一段时间内是有道理的。sidekiq就是一个具体的例子在docker中对流程进行后台监控是最佳做法吗?,docker,Docker,许多最佳实践指南强调将您的进程设置为守护进程,并让某些人监视它以在出现故障时重新启动。这在一段时间内是有道理的。sidekiq就是一个具体的例子 bundle exec sidekiq -d 然而,在我构建Docker的过程中,我发现自己只是在执行命令,如果进程突然停止或退出,整个Docker容器就会自动启动,新的Docker容器就会自动启动——基本上就是对进程进行Daemoning并让某些人监视它的整个过程(所有STDOUT都会发送到CloudWatch/Elasticsearch进行监视)
bundle exec sidekiq -d
然而,在我构建Docker的过程中,我发现自己只是在执行命令,如果进程突然停止或退出,整个Docker容器就会自动启动,新的Docker容器就会自动启动——基本上就是对进程进行Daemoning并让某些人监视它的整个过程(所有STDOUT都会发送到CloudWatch/Elasticsearch进行监视)
我觉得这也倾向于在docker容器中重新执行单个进程的想法,在我看来,如果将其daemonize,将倾向于鼓励违反该通用标准
即使您在容器中只运行一个进程,是否也有关于此的最佳实践文档?您不会对容器中的进程进行后台监控
-d
通常出现在中,使用分离(非守护)模式,docker容器将在后台运行,与当前shell完全分离
对于在一个容器中运行多个进程,.请参阅“”(或更多)。一些相关的12因素应用程序建议
显然,我的理由是具体实施的。tl;博士:我找不到与docker直接相关的最佳实践文档,但我同意你的看法 我能找到的docker的唯一最佳“最佳实践”是at,它指出容器应该是一个过程。在我看来,这也意味着前景化的过程。所以基本上,我和你得出了相同的结论。(你可能也读过这篇文章,但这是写给其他人的) 老实说,我认为我们仍然处在(相对)新的领域,为docker提供了最佳实践。有趣的是,在我工作过的组织中,这是一种最佳实践。我对前景化过程感到更满意的次数比我对自己说“天哪,我真希望我能把它背景化”的次数要多得多。事实上,我想我从来没有说过这样的话 我能想到的唯一例外是,当您尝试评估软件时,需要一种快速而肮脏的方式将基础设施交付给某人。例如:“嘿,我刚听说有一种叫做灯堆的新东西,这是一个docker容器,它有所有的组件供你使用。”。不过,这是一个异常值,如果类似的东西进入生产环境,甚至任何一种严肃的开发环境,我都会不寒而栗
此外,它当然强制采用微架构风格,我认为这最终是一件好事 有多个运行监控程序,可以帮助您对前台进程(或多个进程)进行监控,并在出现故障时重新启动它们(或退出容器) 一个是runit(),我自己没有用过
我的选择是S6()。有人已经为它构建了一个容器信封,名为s6overlay(),这是我通常在需要让用户空间进程作为守护进程运行时使用的。在运行时,它还可以在容器启动、更改权限等方面进行准备工作。您看到哪些最佳实践指南建议对容器内的单个进程进行后台监控?我唯一一次看到这样的建议是当您必须在同一个容器中运行多个进程时。以下是DOCKER的最佳实践:为了澄清我所提到的最佳实践,不倾向于考虑DOCKER通常假设一个传统的VM——因此,我的问题是,即使它是唯一运行的进程,它是否仍然会转载给Docker。我已经阅读了该链接,但正如您所提到的,它指定了多个进程,在我看来,这些进程违反了docker的最佳实践,尽管它们向您展示了如何执行。我知道-d代表docker运行:)。我的问题针对docker中的流程,因为许多安装指南建议对流程进行后台监控,并使用诸如supervisor之类的工具来确保其运行。