我正在研究一系列的过程,我计划把它们放入自己的容器中。这是一个简单的一步一步的过程,但我不知道从一个容器到下一个容器获取数据的最佳方法是什么,也不知道如何跟踪进度。通常,我会将活动2、3和4个单独的脚本导入到活动1中。现在,每个活动都是一个单独的容器,我不知道该怎么做。
活动1-提供一个二维形状矢量。将其传递给活动2。
活动2-根据活动1提供的形状下载图像。
活动3-一旦图像被下载,运行一些分析。
活动4-一旦分析完成,运行统计数据并将信息保存到数据库中。
一个想法是使用码头运行和入口点。活动1将在某个时候运行活动2,它将python脚本作为入口点。
docker run activity2 "inputVectorFromActivity1"另一个选择是使用环境变量。
docker run activity2 -e INVECTOR="inputVectorFromActivity1"因此,在这些例子中,活动1调用2,调用3,调用4。这似乎合乎逻辑,但我不确定这是最好的解决方案。我也没有看到一种优雅的方法来跟踪进度或报告错误。
任何洞察力都会受到极大的赞赏。
发布于 2018-10-30 13:44:43
我会查看一个排队系统,例如RabbitMQ。这将使您有四个队列,每个任务一个队列,并让您跟踪事物的位置,并且一次在每种可能的状态下有多个事物。您可以有四个单独的长时间运行的容器,它们都是在其中一个队列上工作的,如果您需要更多的处理能力,比如说分析阶段,您可以启动容器的多个副本。
当您列出问题时,实际上听起来并不太复杂,您应该考虑在单个进程/脚本/容器中运行这个问题的优点。(例如,“从某个磁盘位置获取数据并将其复制到数据库”的最后一步可能更容易与前面的步骤合并;如果整个管道简化为“获取数据、处理数据并保存数据”,则不将其称为“管道”可能更简单。)
您几乎肯定不应该将docker run或docker exec作为核心处理流程的一部分。如果您可以运行这些Docker命令中的任何一个,那么您可以对主机系统做任何事情:有一些主要的安全问题您不愿意考虑。取决于您的环境,您可能也希望避免一些启动成本(例如,涉及JVM的任何东西仍然要花费很长时间才能出现)。长期运行的工人容器通常是一个更好的模型。
https://stackoverflow.com/questions/53064777
复制相似问题