我有~4个微服务,一个Keycloak和一个RabbitMQ服务器,我想通过Docker部署.每个微服务都必须能够与Keycloak交谈,有些人需要与RabbitMQ交谈.
为了保持干净,我想为Keycloak创建一个docker-compose文件,一个用于RabbitMQ,每个微服务一个.这是正确的方法吗? (每个微服务都有自己的数据库.)
MS A,B,C,D需要能够调用Keycloak; MS C,D需要能够与RabbitMQ交谈.
将所有微服务与Keycloak / RabbitMQ服务器连接的最佳方法是什么?一些微服务也需要能够彼此交谈.
最佳答案
是的,你可以像你说的那样,通过为每个服务创建一个撰写文件,但是如果你想保持它干净,你可以把它们放在一个文件中,如下所示:
原文链接:https://www.f2er.com/docker/436593.htmlversion: '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