Лучший подход к созданию контейнеров - PullRequest
1 голос
/ 23 апреля 2020

Я разрабатываю приложение с nodejs, mysql, которое имеет следующие зависимости

  • Nginx (для обратного проксирования БД и сервера nodejs)
  • ghostscripts (зависит от операционной системы)
  • pdftk (зависит от операционной системы)

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

Должен ли я создать один Nginx контейнер, один nodejs контейнер и один MySQL и заставить их общаться друг с другом ? Я знаю, что это лучший подход, поскольку он масштабируемый, но в этом случае как и где мне установить ghostscript и pdftk? (приложение nodejs использует Ghostscript и pdftk для файлов pdf)

или

, если мне нужно создать один контейнер Ubuntu docker и установить все (а именно. Nginx, pdftk, Ghostscript, mysql) в нем?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2020

Разделение приложения на отдельные контейнеры требует четко определенного API, поддерживающего вызовы по сети (обычно HTTP или другой протокол приложения в стеке TCP).

Поскольку и ghostscripts, и pdftk являются инструментами командной строки, вызываемыми используя CLI, вы не можете вызывать их из другого контейнера из коробки, для этого вам нужно будет разработать какой-нибудь внешний интерфейс API.

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

Из вашего описания неясно, какую роль играет nginx, но предполагается, что это своего рода клиент, обращенный к веб-серверу или прокси-серверу 3 контейнеры имеет смысл в вашем случае

  • NodeJs + PDFTK + Ghostscripts (Приложение)
  • Nginx (веб-сервер / прокси)
  • MySQL (База данных)

Приложение NodeJS имеет все свои зависимости внутри приложения, но более свободно связано с Nginx и MySQL, с которыми оно может связываться по сети.

0 голосов
/ 23 апреля 2020

Вы должны создать отдельные контейнеры для каждого приложения, потому что это позволяет вам:

  • Независимое развертывание.
  • Независимое масштабирование.
  • Независимое развитие.
  • Изоляция и безопасность.

Для удобства вы можете использовать docker -compose , что позволяет запускать настройку и запуск нескольких контейнеров docker с одна команда.

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

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