Контейнеры с конвейерами: следует ли хранить ваши данные отдельно от контейнера - PullRequest
0 голосов
/ 18 февраля 2019

Я очень плохо знаком с контейнерами, и мне было интересно, есть ли «лучшая практика» для следующей ситуации:

Допустим, я разработал общий конвейер с использованием нескольких программных инструментов для анализа данных секвенирования следующего поколения.(Я работаю в науке).Я решил сделать контейнер для этого конвейера, чтобы я мог легко поделиться им с коллегами.В контейнере будут установлены необходимые инструменты и их зависимости, а также все сценарии для запуска конвейера.Там будет какой-нибудь скрипт-обертка / мастер для запуска всего конвейера, что-то вроде: bash run-pipeline.sh -i input data.txt

Мой вопрос: если вы используете контейнер для этой цели, сделайтеВы должны поместить свои данные ВНУТРИ контейнера, ИЛИ можете ли вы запустить конвейер с вашими данными, которые находятся вне вашего контейнера?Другими словами, вы должны поместить свои входные данные в контейнер, чтобы затем запустить конвейер на нем?

Я изо всех сил пытаюсь найти пример случая.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Для меня ответ очевиден - данные принадлежат за пределами изображения.

Причина в том, что если вы строите изображение с данными внутри, как ваши коллеги собираются использовать его со своими данными?

Нет смысла говорить о данных, находящихся внутри или снаружи контейнера.Данные будут внутри контейнера.Вопрос только в том, как он туда попал?

Мой рекомендуемый процесс выглядит примерно так:

  1. Создайте изображение со всеми вашими сценариями, необходимыми инструментами, зависимостями и т. Д .;но не данные.Для простоты назовем этот образ pipeline.
  2. Привязать данные монтирования в томах к контейнеру.docker container create --mount type=bind,source=/path/to/data/files/on/host,target=/srv/data,readonly=true pipeline

Конечно, замените / path / to / data / files / on / host на соответствующий путь.Вы можете хранить свои данные в одном месте, а ваши коллеги - в другом.Вы делаете замену, подходящую для вас, и они должны будут сделать замену, подходящую для них.

Однако внутри контейнера данные будут находиться в / srv / data.Ваши сценарии могут просто предполагать, что это будет там.

0 голосов
/ 18 февраля 2019

Для обработки описанного сценария я бы порекомендовал файлы для обмена данными между вашими этапами обработки.Чтобы перенести файлы в ваш контейнер, вы можете смонтировать локальный каталог в ваш контейнер.Это также обеспечивает некоторую сохранность ваших контейнеров.Способ монтирования локальной файловой системы в ваш контейнер показан в следующем примере.

version: '3.2'
services:
    container1:
        image: "your.image1"
        volumes:
            - "./localpath:/container/internal"
    container2:
        image: "your.image2"
        volumes:
            - "./localpath:/container/internal"
    container3:
        image: "your.image3"
        volumes:
            - "./localpath:/container/internal"

В примере используется файл компоновки Docker для описания зависимостей между вашими контейнерами.Вы можете реализовать то же самое без docker-compose.Затем вы должны указать монтирование вашего контейнера в команде запуска Docker.

https://docs.docker.com/engine/reference/commandline/run/

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