我有一个Docker映像,其中封装了一些处理步骤:具有线性相关性的A
、B
、C
:每一步都会产生一些后续步骤所需的工件(文件)。
在给定这些约束条件的情况下,运行此管道的稳健方式是什么?
一个简单的想法是编写一个shell脚本,运行每个步骤如下:
# run.sh
python step_a.py [args]
python step_b.py [args]
./step_c [args]
并将run.sh
定义为对接器图像的ENTRYPOINT
。
这是否足够好?有哪些潜在的警告?有没有更好的方法?
我更喜欢类似docker-compose
的东西,但是即使使用depends_on
,也不能保证后续步骤只在前面的步骤完成之后才运行。
1条答案
按热度按时间p4tfgftt1#
我认为使用dockerfile实现这一点的最健壮的方法是使用multi-stage构建。
在其核心,多阶段构建只是将docker文件分解为多个更小的映像,您可以更精细地控制这些映像;所以对于你的用例,你会有一个阶段给每个部分。2然后你可以在阶段之间复制你需要的工件。3最后,因为你想要一个输出而不是一个容器,你会把入口点做成Rust二进制,然后让它吐出你需要的任何东西。4看起来有点像这样
基本要点-
1.制作一些python映像,安装第一个python文件的先决条件
1.运行第一个python文件
1.创建一些python映像,安装第二个python文件的先决条件
1.将所需工件从第一阶段复制到当前(第二)阶段
1.运行第二个python文件
1.弄些铁 rust 的图像,安装需要的东西
1.将所需工件从第二阶段复制到当前(第三)阶段