使用Docker和AWS ECS运行Spring Boot微服务

我正在使用Spring Boot,Kafka和MongoDB开发一个简单的基于微服务的应用程序。

有4个基于Spring Boot的REST服务在MongoDB上执行CRUD(目前在所有服务之间共享),并向/从Kafka集群发布/轮询消息。

目前,我已经将他们全部部署在手工制作的AWS EC2实例上。 卡夫卡/动物园pipe理员有3个经纪人/实例。 没有复制/分片的MongoDb。

我想达到什么目的?

  • 在由ECSpipe理的Docker容器中运行微服务。
  • 能够扩展这些服务。
  • 能够在ECS上创build专用环境(DEV,QA,UAT,PROD)。
  • 运行Kafka和MongoDB集群,将复制和分片作为由ECSpipe理的容器。

我对Docker和ECS概念相当陌生,不能准确地find它是如何完成的。 我能够创buildDockerfile,镜像并推送到docker hub,并使用ECS上的一个服务(没有外部依赖)。 其中一个Dockerfile看起来像这样:

FROM openjdk:8-jre-alpine EXPOSE 443 443 LABEL "author":"Kumar Sambhav Jain" COPY build/distributions/app.tar /opt/app/ RUN tar -xvf /opt/app/admin.tar -C /opt/app/ WORKDIR /opt/app/admin/bin ENTRYPOINT ["./admin"] 

问题: –

  1. 什么是理想的或正确的方式来部署整个应用程序? 我需要每个环境(DEV,QA,UAT)的ECS集群还是每个服务types的ECS集群 – 两个服务需要在端口443/80上公开公开。
  2. 服务如何连接到在容器中运行的MongoDB和Kafka? 目前Kafka经纪人和mongo连接保持在application.yml文件中,如下所示: –
 spring: data: mongodb: host: 172.31.18.25 database: abcd username: test password: abcd@123 cloud: stream: kafka: binder: zk-nodes: - 172.31.18.58:2181 - 172.31.28.201:2181 - 172.31.25.60:2181 brokers: - 172.31.18.58:9092 - 172.31.28.201:9092 - 172.31.25.60:9092 

一旦所有东西都被集装箱化,它是如何改变的?

参考关于这个确切的主题的任何研究材料。