Как сделать докер рабочего процесса для нескольких процессов - PullRequest
0 голосов
/ 01 мая 2019

Я выполняю множество задач, связанных со средствами массовой информации, используя контент, который обрабатывается в разных контейнерах Docker, и мне хотелось бы получить несколько советов о том, как создать простой, оптимизированный рабочий процесс.В частности, я не уверен, когда использовать сценарии оболочки, а когда использовать файлы Docker.

Общая последовательность событий:

  1. Преобразование входного видео в последовательность изображений
  2. Обработка этой последовательности изображений
  3. Преобразование обработанных изображений обратно в видео
  4. Сохранение этого видео на хосте

Каждое из них запускается сдругая команда 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

Самый простой способ сделать это - создать сценарий оболочки с этими тремя командами и просто запуститьэтот сценарий.Раздражает то, что мне приходится редактировать скрипт оболочки и каждый раз менять путь ввода видеофайла.Кроме того, вызов 3 команд на шаге 2. не кажется обычной практикой.

Я понимаю, что могу использовать опцию RUN в Dockerfile, чтобы указать, что эти команды автоматически запускаются при сборке файла Docker., но монтирование томов через Dockerfile и получение данных из работающего контейнера и к хосту было большой проблемой.И некоторые из этих команд зависят от того, какой образ Docker устанавливается локально с определенным именем (переменная $DOCKER_IMAGE на шаге 2 выше.

Итак:

  1. Когда у вас есть несколько команд docker run, каждая из которых полагается на данные друг друга, каков правильный, масштабируемый способ выполнения этих команд?

  2. Когдалюди используют сценарии оболочки, и когда люди используют Dockerfiles для управления несколькими заданиями?

  3. Рекомендуется ли Dockerfile запускать задание, которое обрабатывает носители, или должноэто можно сделать из сценария оболочки в виде команды docker run?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...