Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在docker中对流程进行后台监控是最佳做法吗?_Docker - Fatal编程技术网

在docker中对流程进行后台监控是最佳做法吗?

在docker中对流程进行后台监控是最佳做法吗?,docker,Docker,许多最佳实践指南强调将您的进程设置为守护进程,并让某些人监视它以在出现故障时重新启动。这在一段时间内是有道理的。sidekiq就是一个具体的例子 bundle exec sidekiq -d 然而,在我构建Docker的过程中,我发现自己只是在执行命令,如果进程突然停止或退出,整个Docker容器就会自动启动,新的Docker容器就会自动启动——基本上就是对进程进行Daemoning并让某些人监视它的整个过程(所有STDOUT都会发送到CloudWatch/Elasticsearch进行监视)

许多最佳实践指南强调将您的进程设置为守护进程,并让某些人监视它以在出现故障时重新启动。这在一段时间内是有道理的。sidekiq就是一个具体的例子

bundle exec sidekiq -d
然而,在我构建Docker的过程中,我发现自己只是在执行命令,如果进程突然停止或退出,整个Docker容器就会自动启动,新的Docker容器就会自动启动——基本上就是对进程进行Daemoning并让某些人监视它的整个过程(所有STDOUT都会发送到CloudWatch/Elasticsearch进行监视)

我觉得这也倾向于在docker容器中重新执行单个进程的想法,在我看来,如果将其daemonize,将倾向于鼓励违反该通用标准


即使您在容器中只运行一个进程,是否也有关于此的最佳实践文档?

您不会对容器中的进程进行后台监控

-d
通常出现在中,使用分离(非守护)模式,docker容器将在后台运行,与当前shell完全分离

对于在一个容器中运行多个进程,.

请参阅“”(或更多)。

一些相关的12因素应用程序建议

网站:

Docker是由PAAS运营商()开源的,因此作者完全有可能受到此体系结构建议的影响。这将解释为什么Docker设计为正常运行单个进程

这里要记住的是Docker容器不是虚拟机,尽管完全可以使它像虚拟机一样嘎嘎作响。实际上,docker容器是在主机服务器上运行的一个被囚禁的进程。像Kubernetes(Mesos,Docker Swarm模式)这样的容器编排引擎具有确保容器保持运行的功能,如果需要,可以替换它们

还记得我提到的鸭子发声吗?:-)如果您希望您的容器运行多个进程,那么可以运行一个管理进程来保持内部的一切正常运行(当所有进程停止时,容器就会死亡)

这种虚拟机嫉妒的最终表现是来自Ubuntu的LXD,在这里,一整套虚拟机服务在LXC容器中启动

总之,这是最佳实践吗?我认为没有明确的答案。就我个人而言,我会说不,原因有二:

  • 我专注于部署12因素兼容的应用程序,因此与单流程模型结为一体
  • 如果我需要在同一组数据上运行两个进程,那么在Kubernetes中,我可以在同一个POD中运行容器。。。表示Kubernetes管理进程(作为具有公共数据卷的单独容器运行)
    显然,我的理由是具体实施的。

    tl;博士:我找不到与docker直接相关的最佳实践文档,但我同意你的看法

    我能找到的docker的唯一最佳“最佳实践”是at,它指出容器应该是一个过程。在我看来,这也意味着前景化的过程。所以基本上,我和你得出了相同的结论。(你可能也读过这篇文章,但这是写给其他人的)

    老实说,我认为我们仍然处在(相对)新的领域,为docker提供了最佳实践。有趣的是,在我工作过的组织中,这是一种最佳实践。我对前景化过程感到更满意的次数比我对自己说“天哪,我真希望我能把它背景化”的次数要多得多。事实上,我想我从来没有说过这样的话

    我能想到的唯一例外是,当您尝试评估软件时,需要一种快速而肮脏的方式将基础设施交付给某人。例如:“嘿,我刚听说有一种叫做灯堆的新东西,这是一个docker容器,它有所有的组件供你使用。”。不过,这是一个异常值,如果类似的东西进入生产环境,甚至任何一种严肃的开发环境,我都会不寒而栗


    此外,它当然强制采用微架构风格,我认为这最终是一件好事

    有多个运行监控程序,可以帮助您对前台进程(或多个进程)进行监控,并在出现故障时重新启动它们(或退出容器)

    一个是runit(),我自己没有用过


    我的选择是S6()。有人已经为它构建了一个容器信封,名为s6overlay(),这是我通常在需要让用户空间进程作为守护进程运行时使用的。在运行时,它还可以在容器启动、更改权限等方面进行准备工作。

    您看到哪些最佳实践指南建议对容器内的单个进程进行后台监控?我唯一一次看到这样的建议是当您必须在同一个容器中运行多个进程时。以下是DOCKER的最佳实践:为了澄清我所提到的最佳实践,不倾向于考虑DOCKER通常假设一个传统的VM——因此,我的问题是,即使它是唯一运行的进程,它是否仍然会转载给Docker。我已经阅读了该链接,但正如您所提到的,它指定了多个进程,在我看来,这些进程违反了docker的最佳实践,尽管它们向您展示了如何执行。我知道-d代表docker运行:)。我的问题针对docker中的流程,因为许多安装指南建议对流程进行后台监控,并使用诸如supervisor之类的工具来确保其运行。