Docker compose - контейнер с инструментами командной строки - PullRequest
0 голосов
/ 06 февраля 2019

Извините, если вопрос окажется общим, приветствуются любые предложения по обновлению формулировки!

Итак, у меня есть Java-приложение, которое использует инструменты командной строки для вычислений.Звонки очень редки.Например, возможно, что через 24 часа на него не будет звонков.Вопрос в том, как Docker может это сделать?

Есть несколько возможных решений:

  • поместить все в один контейнер
  • отдельный контейнер tty, называемыйпо ssh
  • разработать слой http поверх инструментов
  • открыть docker через systemd для запуска контейнера инструментов по запросу
  • открыть docker через tcp для запуска контейнера инструментов по запросу (https://docs.docker.com/engine/api/v1.24/#1-brief-introduction)

Вопрос в том, что я что-то упустил? Есть ли другие возможные решения? Все ли перечисленные решения жизнеспособны? Есть ли способ сделать его более чистым с помощью таких инструментов, как Swarm или Kubernetes?

1 Ответ

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

По моему опыту, Docker Way - это ваш третий вариант, чтобы обернуть операцию в фасаде HTTP и оставить ее всегда запущенной.

Путь HTTP хорошо поддерживается Docker (вы можете использовать другиеконтейнеры '--name в качестве имен хостов, например), и их легко тестировать или моделировать в других средах.Это также означает, что если вам нужно обновить одно из этих вспомогательных средств, вы можете просто перезапустить этот другой контейнер;вам не нужно закрывать основное приложение, чтобы обновить его.

Docker не очень хорошо работает с процессами, основной режим взаимодействия которых - аргументы командной строки, stdin или stdout.В частности, для одного контейнера для запуска другого контейнера этому контейнеру требуется неограниченный root-доступ через хост , и вам нужно работать с Docker API, а не просто «запускать подпроцесс».

Есливнешние программы достаточно автономны, затем копируют их в Dockerfile и называют их обычными подпроцессами.Вы упоминаете Java;если вы добавляете целую JVM к образу, не являющемуся Java, для чего-то, что вы запускаете только изредка, это добавит раздувание и сложность.

...