Несколько приложений (микросервисы) и один прокси-сервер (nginx) docker -конфигурация / архитектура - PullRequest
0 голосов
/ 10 марта 2020

Имеет следующую архитектуру:

  • Микросервис 1 + БД (microservice1 / docker -compose.yml)
  • Микросервис 2 + БД (microservice2 / docker -compose .yml)
  • Прокси (proxy / docker -compose.yml)

Какой из следующих вариантов лучше всего развернуть в производственной среде?

  1. Docker Создать переопределение. Имейте docker -композицию для каждого микросервиса и другую docker -композицию для прокси. Когда производственное развертывание завершено, все docker -композиции будут объединены для создания только одного (с docker-compose -f microservice1/docker-compose.yml -f microservice2/docker-compose.yml -f proxy/docker-compose.yml up. Таким образом, прокси-контейнер, например nginx, будет иметь доступ к микросервисам, чтобы иметь возможность перенаправление на один или другой в зависимости от запроса.
  2. Совместно используемая внешняя сеть. * Компоновка docker для каждого микросервиса и другая docker для прокси. Во-первых, внешняя сеть должна быть создан для связывания контейнера прокси с микросервисами. docker network create nginx_network. Затем в каждом файле docker compose эта сеть должна указываться в необходимых контейнерах, чтобы прокси имел видимость микросервисов и, таким образом, мог использовать их. в конфигурации. Пример приведен по следующей ссылке { ссылка }.

Первый вариант прост, но обеспечивает небольшую гибкость при настройке многих микросервисов или приложений, поскольку все docker -составить все приложения должны быть объединены для создания окончательной конфигурации. Опция cond использует сети, которые являются фундаментальной опорой Docker. С другой стороны, вам не нужно объединять все docker -компоненты.

Из этих двух вариантов, учитывая сценарий наличия нескольких микросервисов и одного прокси-сервера для настройки доступа, который будет лучший? Почему?

Тнахкс заранее.

1 Ответ

0 голосов
/ 26 марта 2020

docker -композиция предназначена для организации нескольких контейнеров в одном файле. Я не знаю содержимого ваших docker -компонентных файлов, но правильный способ - написать один docker-compose.yml, который может содержать:

version: '3.7'

services:

  microservice1_app:
    image: ...
    volumes: ...
    networks:
      - service1_app
      - service1_db

  microservice1_db:
    image: ...
    volumes: ...
    networks:
      - service1_db

  microservice2_app:
    image: ...
    volumes: ...
    networks:
      - service2_app
      - service2_db

  microservice2_db:
    image: ...
    volumes: ...
    networks:
      - service2_db

  nginx:
    image: ...
    volumes: ...
    networks:
      - default
      - service1_app
      - service2_app

volumes:
...

networks:
  service1_app:
  service1_db:
  service2_app:
  service2_db:
  default:
    name: proxy_frontend
    driver: bridge

Таким образом, nginx контейнер может связываться с microservice1_app контейнером через microservice1_app имя хоста. Если требуются другие имена хостов, его можно настроить с помощью подраздела aliases в разделе услуг networks.

Бонус безопасности В приведенной выше конфигурации microservice1_db виден только microservice1_app (то же самое для microservice2) и nginx может видеть только microservice1_app и microservice2_app и доступен снаружи Docker (bridge mode)

...