Лучшие практики сети docker

У меня есть ~ 4 микросервиса, Keycloak и RabbitMQ Server, который я хочу развернуть через Docker. Каждый микросервис должен иметь возможность разговаривать с Keycloak, а некоторым - с RabbitMQ.

Чтобы сохранить чистоту, я хотел создать файл docker-compose для Keycloak, один для RabbitMQ и по одному для каждого микросервиса. Это правильный способ сделать это? (Каждый микросервис имеет свою собственную базу данных.)

Image Microservices Relations etc.

MS A, B, C, D должны иметь возможность вызывать Keycloak; MS C, D должна иметь возможность разговаривать с RabbitMQ.

Как лучше всего подключить все микросервисы к серверам Keycloak / RabbitMQ? Некоторые микросервисы также должны иметь возможность общаться друг с другом.

kubernetes.io/docs/concepts/workloads/pods/pod
Hackerman 13.09.2018 20:02

Зачем вам нужны разные сети для ваших услуг. Сложите их все в одно целое. Вы должны определить один docker-compose для своей системы (микросервисы, keycloak, rabbitmq). Это будет охватывать единую сеть для вашей системы. Это упрощает запуск вашей системы локально.

Jehof 14.09.2018 07:59
7
2
1 192
2

Ответы 2

Вы можете сделать это через докер, но вам нужно учесть следующие моменты:

  • Почему вы хотите развернуть

Если ответ - разработка или тестирование, то да, вы можете использовать docker compose. Это поможет вам запустить все ваши контейнеры из одного места, и вы можете настроить их в одном файле. Вы можете настроить keycloak, базы данных и службы rmq на один и тот же хост с помощью docker compose, и они могут общаться друг с другом.

Если вы хотите сделать это для prod или prod, например env, мы можем изучить docker swarms. Это инкрементное обновление от docker compose, позволяющее развертывать контейнеры на нескольких хостах.

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

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

Docker swarms и kubernetes также можно использовать для разработки и тестирования env. они всегда могут работать на одном хосте.

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

Light.G 15.09.2018 07:11

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

version: '2'
services:  
  rabbitmq:
    image: rabbitmqImg
    networks:
      - rabbitmq
  keycloak:
    image: keycloakImg
    networks:
      - keycloak
  MS-A:
    image: MSImg
    networks:
      - keycloak
  MS-B:
    image: MSImg
    networks:
      - keycloak
  MS-C:
    image: MSImg
    networks:
      - keycloak
      - rabbitmq
  MS-D:
    image: MSImg
    networks:
      - keycloak
      - rabbitmq
networks:
  rabbitmq:
    external:
      name: rabbitmq
  keycloak:
    external:
      name: keycloak

с этим yaml микросервисы могут общаться друг с другом через сеть keycloak, все микросервисы могут общаться с сервером keycloak, также используя сеть keycloak, а MS-C, MS-D могут общаться с rabbitmq через сеть rabbitmq. но если есть или будут какие-то другие микросервисы, которым не нужно общаться ни с rabbitmq, ни с keycloak, вам следует создать другую сеть и поместить в нее микросервисы, а также разместить микросервисы в других сетях по мере необходимости.

как сказал Анунай, вы можете использовать режим роя или кубернеты, но если вы новичок, придерживайтесь docker-compose, после этого для масштабирования и оркестрации вы можете использовать эти фреймворки.

Обновлено: для баз данных есть несколько способов, которые зависят от вашей архитектуры базы данных. например, если у вас есть контейнер базы данных для каждой MS, вы должны создать сеть для каждой MS, как показано ниже:

version: '2'
services:
# General Services      
  rabbitmq:
    image: rabbitmqImg
    networks:
      - rabbitmq
  keycloak:
    image: keycloakImg
    networks:
      - keycloak
  # Micro Services      
  MS-A:
    image: MSImg
    networks:
      - ms-a-net
      - keycloak
  MS-B:
    image: MSImg
    networks:
      - ms-b-net
      - keycloak
  MS-C:
    image: MSImg
    networks:
      - ms-c-net
      - keycloak
      - rabbitmq
  MS-D:
    image: MSImg
    networks:
      - ms-d-net
      - keycloak
      - rabbitmq

  # Database Services      

  DB-A:
    image: DBImg
    networks:
      - ms-a-net
  DB-B:
    image: DBImg
    networks:
      - ms-b-net
  DB-C:
    image: DBImg
    networks:
      - ms-c-net
  DB-D:
    image: DBImg
    networks:
      - ms-d-net

networks:
  rabbitmq:
    external:
      name: rabbitmq
  keycloak:
    external:
      name: keycloak

  # Services Network

  ms-a-net:
    external:
      name: ms-a-net
  ms-b-net:
    external:
      name: ms-b-net          
  ms-c-net:
    external:
      name: ms-c-net
  ms-d-net:
    external:
      name: ms-d-net                    

Может быть, вы могли бы добавить часть базы данных?

Light.G 14.09.2018 02:35

Другие вопросы по теме