我正在使用在不同Docker容器中处理的内容来执行许多与媒体相关的任务,我想获得有关如何创建简单,简化的工作流的一些指导。具体来说,我不确定何时使用外壳脚本以及何时使用Dockerfile。
常见的事件顺序是:
每个命令都使用不同的docker run
命令运行。我想编写这些过程的脚本,这样我就不必每次都坐在命令行中输入docker run image_name etc. etc.
。
步骤1 如下运行:
docker run -v $PWD:/temp/ jrottenberg/ffmpeg -i /temp/$SRC_VIDEO_DIR/$FILENAME /temp/$OUTPUT_IMAGE_DIR/$OUTPUT_IMAGE_BASENAME%06d.bmp
第2步。按以下方式运行:
docker run -v $PWD/$OUTPUT_IMAGE_DIR:/notebook/raisr/test -v $PWD/$OUTPUT_LARGER_IMAGE_DIR:/notebook/raisr/results $DOCKER_IMAGE /bin/bash -c "source activate superres; cd /notebook/raisr; python test.py"
第3步。按以下方式运行:
docker run -v $PWD:/temp/ jrottenberg/ffmpeg -framerate $FPS -i /temp/$OUTPUT_IMAGE_DIR/$OUTPUT_IMAGE_BASENAME%06d.bmp -c:v qtrle -pix_fmt rgb24 /temp/output_video/$OUTPUT_FILENAME
最简单的方法似乎是使用其中的三个命令创建一个Shell脚本,然后运行该脚本。烦人的是,我每次都必须编辑shell脚本并更改视频文件的输入路径。在步骤2中也调用3个命令似乎并不常见。
我意识到我可以在Dockerfile中使用RUN
选项来指定那些命令在构建docker文件时自动运行,但是可以通过Dockerfile装载卷并取出数据运行中的容器并给主机带来了很大的痛苦。其中的某些命令取决于本地安装的Docker映像,该映像具有特定名称(上述步骤2中的变量$DOCKER_IMAGE
。
所以:
如果您有多个docker run
命令,每个命令彼此依赖,那么运行这些命令的正确,可扩展的方法是什么?
人们何时使用Shell脚本以及何时使用Dockerfile管理多个作业?
让Dockerfile运行可处理媒体的作业是一种好习惯,还是应该通过docker run
命令从Shell脚本完成此工作?