3

Работая над моим проектом, который больше обычного, я создаю веб-приложение, которое будет говорить с несколькими моими API, написанными на его собственном языке. Я использую две базы данных, один из которых MariaDB, а второй DgraphКак настроить Docker для приложения на основе полиглота на основе микросервисов?

Вот моя местная архитектура директор (базы данных граф.):

  • услуги - все мои услуги
    • апи - содержит все мои API
      • auth - содержит мое использование г авт/регистрация API
        • v1 - содержит мою текущую (только) API версия
      • испытания - содержит мой АНИ моего называется испытание
      • и т.д ...
    • приложение - содержит пользователей приложения будет взаимодействовать с
    • демон - содержит мои программы, которые будут работать как демоны
    • инструменты - содержит инструменты (импорт данных, скребки и т.д.)
  • базы данных - чтобы содержать две мои конфиги (MariaDB и Dgraph)

Local File Structure

Becaus Некоторые компоненты написаны в PHP7-NGINX, а другие - в PYTHON-FLASK-NGINX, как я могу сделать правильную настройку Docker с учетом этого? Каждая служба, api, daemon и инструмент независимы, и все они говорят через свои собственные конечные точки REST.

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

Я новичок в Docker, и все чтение меня смущает: должен ли я создать docker-compose.yml для каждой службы или для всего проекта? Но каждая служба развертывается отдельно, и как это известно docker-compose.yml?

Любые указатели на чистое решение? Должен ли я создать контейнер для каждой службы и в этом контейнере поставить NGINX, PHP или PYTHON и т. Д.?

ответ

1

Обычный подход состоит в том, чтобы поместить каждый отдельный компонент в отдельный контейнер. Общая идея Докера - 1 контейнер = 1 логическая задача. 1 задача не совсем 1 процесс, это всего лишь наименьшая независимая единица.

Так что вам нужно будет найти 4 основные изображения (возможно, существующие из Докер реестра должны соответствовать):

  • PHP7-NGINX
  • ПИТОН-ФЛЯГА-NGINX
  • MariaDB
  • Dgraph

Вы можете использовать https://hub.docker.com/search/ для поиска соответствующих изображений.

Затем создайте пользовательский файл Docker для каждого компонента (с помощью PHP7-NGINX или PYTHON-FLASK-NGINX в качестве родительского изображения).

Возможно, вам не нужен пользовательский файл Docker для баз данных. Обычно образы базы данных требуют просто монтировать файл конфигурации в изображение с использованием опции --volume или передавать аргументы среды (подробности см. В описании базового изображения).

После этого вы можете просто написать docker-compose.yml и определить здесь, как ваши изображения связаны и другие параметры. Это будет выглядеть как https://github.com/wodby/docker4drupal/blob/master/docker-compose.yml. Кстати, github полон хороших примеров docker-compose.yml

Если вы собираетесь запускать службы на разных серверах, то вы можете создать кластер Swarm и запустить свой docker-compose.yml против него : https://docs.docker.com/compose/swarm/. После этого вы можете легко масштабировать, развертывая столько экземпляров каждого микросервиса, сколько вам нужно (поэтому более полезно иметь отдельные изображения для каждого микросервиса).

+0

Но все службы PHP7-NGINX будут работать на разных серверах, поэтому я должен создать столько контейнеров PHP7-NGINX, что у меня будут службы, работающие на них или только для одного? – Lazhar

+0

@Lazhar да, каждый контейнер похож на экземпляр вашего приложения, работающего на сервере. Поэтому, если вы хотите запустить службу на каждом сервере, вам понадобится контейнер, работающий на каждом из них. С роутом докеров вы можете определить, где находится каждый контейнер, поэтому вы можете привязать контейнер к определенному серверу/докеру. В качестве альтернативы докерному рою вы также можете использовать Kubernetes. – Pitt

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

  • Нет связанных вопросов^_^