Docker Compose — как включить служебные скрипты Python?

#docker #docker-compose

Вопрос:

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

Служба использует скрипт на Python, который имеет свои собственные зависимости и может быть вызван с несколькими различными аргументами. Первоначально зависимости сценариев были установлены на уровне всей системы, поэтому я просто жестко закодировал путь к сценарию в коде службы, и это сработало.

Однако теперь, когда я пытаюсь перейти в Докер, я не знаю, как с этим справиться. Некоторые идеи:

  1. свяжите-смонтируйте каталог скриптов — но тогда как убедиться, что все его зависимости доступны в среде контейнера?
  2. закрепите скрипт Python и добавьте его в качестве службы в docker, составьте YAML. Действительно не уверен в этом, так как на самом деле это не сервис, а просто служебный скрипт, который завершается, как только он завершает обработку.

Скрипт Python также вызывается с помощью комбинации аргументов. Не уверен, уместно ли это, но я заметил, что, когда я создаю новый контейнер из изображения, я не могу снова запустить контейнер с другими аргументами — мне приходится заново создавать контейнер с другими аргументами. Я действительно не понимаю идеи, лежащей в основе такого поведения, и был бы признателен, если бы кто-нибудь объяснил логику этого.

Комментарии:

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

2. Если это канонический способ делать подобные вещи, то я так думаю.

3. Вы читали Руководство пользователя по упаковке Python и аналогичную документацию? Вы должны быть в состоянии объявить все зависимости вашего скрипта на Python в setup.py , requirements.txt , или Pipfile , и он может работать в виртуальной среде, без специального докера.

4. Я согласен. У меня возникает вопрос: как лучше всего сделать этот скрипт доступным для моей службы, которая работает в контейнере Docker? Объедините службу и сценарий вместе и затем создайте образ? Каким-нибудь другим способом?