2016-10-16 2 views
0

Я докционирую веб-приложение Python с использованием изображения https://hub.docker.com/r/tiangolo/uwsgi-nginx, которое использует супервизор для управления экземпляром uWSGI.Контейнерный шаблон наилучшей практики

Мое приложение на самом деле требует дополнительного запуска под управлением супервизора (LibreOffice без головы, с которым я создаю документы через модуль appy), и мне интересно, каков правильный шаблон для его реализации.

Как я вижу это, я мог бы расширить изображение выше с дополнительной конфигурацией диспетчера для моих нужд (вместе со всеми необходимыми этапами установки уровня ОС), но это будет противоречить общему принципу работы наименьшее количество отдельных процессов в данном контейнере. Однако, поскольку мое приложение Python предназначено для общения с LibreOffice только локально, я не уверен, как я мог бы достичь этого с помощью более контейнерного подхода. Спасибо за любую помощь или предложение.

+0

Что делает взаимодействие LibreOffice? – R0MANARMY

+0

@ R0MANARMY Он создает документы с модулем 'appy' (я редактировал свой вопрос). – cjauvin

ответ

1

Вы уже взорвали «один процесс на контейнер» - просто добавьте еще один процесс. Это не сложное правило, или даже одно, с которым все согласны.

Расширьте или еще лучше создайте собственный контейнер. Таким образом, вы владеете им, вы это понимаете, и оно оптимизировано для вашей цели.

2

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

user2105103 прав, хотя изображение, которое вы используете, уже теряет выгоду, поскольку оно запускает Python и Nginx, и вы можете расширить его с помощью LibreOffice без головы и упаковать все ваше приложение без изменения кода.

Если перейти к более «наилучшей практики» подход, вы бы иметь распределенную приложение работает в трех контейнерах в сети Docker:

  • nginx - веб-прокси, это открытая точка входа в приложение. Nginx может выполнять маршрутизацию, кеширование, завершение SSL, ограничение скорости и т. Д.
  • app - ваше приложение Python, видимое только внутри сети Docker. Получает запросы от nginx и использует для обработки документов libreoffice;
  • libreoffice - работает в режиме без звука с открытым API, но доступен только в сети Docker.

Для этого вам потребуется внести изменения в код, введя что-то вроде PyOO, чтобы использовать LibreOffice API удаленно из контейнера приложения.

+0

FWIW, Yelp делает [довольно хороший случай] (https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html) для того, чтобы иметь 2 процесса в контейнере, но только один из них выполняет «настоящую работу». – R0MANARMY

Смежные вопросы