我有~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
你可以通过docker来做到这一点,但是你需要考虑以下事项,
如果答案是开发或测试然后是,你可以使用docker compose。它可以帮助您从一个地方启动所有容器,并且可以将它们配置在一个文件中。您可以通过docker compose将keycloak,rmq数据库和服务全部设置到同一主机上,并且它们可以相互通信
如果你想像env那样为prod或prod做这件事,那么我们你可以看看docker swarms。它是docker compose的增量更新,允许您在多个主机上部署容器。
如果您只有四项服务,那么您可以使用它,但如果您拥有更多服务,或者您需要更好地控制服务的部署方式,运行并需要更多指标和接触点,请选择kubernetes。
如果您想将数据库保存在容器中,我并不确定。容器很容易挥发,但总的来说它们为您提供高可用性,但对于数据库和rmq我个人不会将它们保存在容器中以便生产,但随后您可以阅读并根据您的需要来决定。
Docker群和kubernetes也可用于开发和测试env。它们总是可以在单个主机上运行。