我希望有一个简单的问题;我是Docker和Linux的新手。 大多数文章/ stackoverflow帖子都建议在docker容器内安装cron以使其以can be seen at this link
的身份工作但是,根据下面的图片,我们可以看到Docker Engine是HOST OS的系统和实用程序库与应用程序容器之间的抽象层。
为什么我们不重用HOST附带的系统cron而不是在容器内部安装cron?几乎觉得多余。
我对docker的理解是,您将安装诸如npm节点模块之类的应用程序级库和软件包,例如,将它们安装在nodejs应用容器中,但是如果您需要cron之类的系统实用程序,那么您将以某种方式回调到HOST OS的本机cron实用程序;那么为什么不以某种方式在我们的容器中使用主机的cron,为什么还要在容器中重新安装cron?
最后,您是否会使用 docker-compose 和separate out the cron service into its own container
,然后以某种方式使cron服务与应用程序容器通信并引用其环境变量?
我的意思是在应用容器中定义的环境变量;使那些可以被 cron容器访问的人? 这样我们可以遵循每个容器一项服务的最佳实践?
答案 0 :(得分:1)
如果需要,请在主机上使用cron,例如
0 0 * * * /usr/local/bin/docker run image
据我所知,现代容器应用程序使用来自主机(eco)系统的某种形式的调度。您可以在主机上使用cron来触发docker run
命令。您可以使用通用计划程序,例如Airflow。您可以使用内置的调度服务随附的功能完善的容器平台,例如DC / OS。
在容器本身中将cron与应用程序一起运行没有任何问题。但是,如果从调度服务 outside 触发应用程序容器,则该容器将在作业完成后终止,从而将资源释放给其他应用程序。
第二,每项服务有一个容器被认为是一种好习惯。 Cron本身就是一种服务。