Docker网络最佳实践

前端之家收集整理的这篇文章主要介绍了Docker网络最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有~4个微服务,一个Keycloak和一个RabbitMQ服务器,我想通过Docker部署.每个微服务都必须能够与Keycloak交谈,有些人需要与RabbitMQ交谈.

为了保持干净,我想为Keycloak创建一个docker-compose文件,一个用于RabbitMQ,每个微服务一个.这是正确的方法吗? (每个微服务都有自己的数据库.)

MS A,B,C,D需要能够调用Keycloak; MS C,D需要能够与RabbitMQ交谈.

将所有微服务与Keycloak / RabbitMQ服务器连接的最佳方法是什么?一些微服务也需要能够彼此交谈.

最佳答案
是的,你可以像你说的那样,通过为每个服务创建一个撰写文件,但是如果你想保持它干净,你可以把它们放在一个文件中,如下所示:

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交谈,你应该创建另一个网络并将微服务放入其中,并根据需要将微服务放入其他网络.

正如Anunay所说,你可以使用swarm模式或kubernetes,但如果你是初学者,坚持使用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                    
原文链接:https://www.f2er.com/docker/436593.html

猜你在找的Docker相关文章