Docker映像中管道步骤的单一入口点

v09wglhw  于 2023-01-04  发布在  Docker
关注(0)|答案(1)|浏览(136)

我有一个Docker映像,其中封装了一些处理步骤:具有线性相关性的ABC:每一步都会产生一些后续步骤所需的工件(文件)。
在给定这些约束条件的情况下,运行此管道的稳健方式是什么?
一个简单的想法是编写一个shell脚本,运行每个步骤如下:

# run.sh

python step_a.py [args]
python step_b.py [args]
./step_c [args]

并将run.sh定义为对接器图像的ENTRYPOINT
这是否足够好?有哪些潜在的警告?有没有更好的方法?
我更喜欢类似docker-compose的东西,但是即使使用depends_on,也不能保证后续步骤只在前面的步骤完成之后才运行。

p4tfgftt

p4tfgftt1#

我认为使用dockerfile实现这一点的最健壮的方法是使用multi-stage构建。
在其核心,多阶段构建只是将docker文件分解为多个更小的映像,您可以更精细地控制这些映像;所以对于你的用例,你会有一个阶段给每个部分。2然后你可以在阶段之间复制你需要的工件。3最后,因为你想要一个输出而不是一个容器,你会把入口点做成Rust二进制,然后让它吐出你需要的任何东西。4看起来有点像这样

FROM python-3.8:latest AS stage-1 // this can be whatever image you want

RUN pip install requirements_1.txt // install the reqs for the first python file

RUN python_file_1.py

FROM python-3.8:latest AS stage-2 // again, whatever image you want

RUN pip install requirements_2.txt // same idea

COPY --from=stage-1 ./artifact_1 ./destination // this copies the artifact from running python_file_1.py to somewhere you want it to be. The paths here are obviously placeholders

RUN python_file_2.py

FROM rust:1.31

COPY --from=stage-2 ./artifact_2 ./destination

ENTRYPOINT ["./rust_binary"]

基本要点-
1.制作一些python映像,安装第一个python文件的先决条件
1.运行第一个python文件
1.创建一些python映像,安装第二个python文件的先决条件
1.将所需工件从第一阶段复制到当前(第二)阶段
1.运行第二个python文件
1.弄些铁 rust 的图像,安装需要的东西
1.将所需工件从第二阶段复制到当前(第三)阶段

  1. rust二进制文件的入口点,该文件将生成您的输出

相关问题