目前我有一个由半打左右的微服务支持的Java Web应用程序,其中每个微服务与1个以上的后备资源(DB,第三方REST服务,CRM,遗留系统,JMS等)进行通信)。这些组件中的每一个都存在于1个以上的VM上。因此架构如下:
myapp.war
同时存在于myapp01.example.com
和myapp02.example.com
dataservice.war
生活在dataservice01.example.com
和dataservice02.example.com
,mysql01.example.com
连接到myapp.war
crmservice.war
也会与crmservice01.example.com
上的http://some-3rd-part-crm.example.com
相关联,myapp
连接到dataservice
现在说我想" Dockerify"我的整个应用架构。我会为每种类型的组件(mysql
,crmservice
,[1,2,3].tap { |a| a.each {|x| puts "x = #{x}" if a.length > 2 } }
# x = 1
# x = 2
# x = 3
[1,2].tap { |a| a.each {|x| puts "x = #{x}" if a.length > 2 } }
# <nothing printed>
,{{1}}等编写1个Docker镜像,或者我会写一个&#34; monolithic&# 34;包含所有应用程序,服务,数据库,消息代理(JMS)等的容器?
我确定无论哪种方式都可以这样做,但问题的根源是: Docker容器是用于存放/包含单个应用,还是用于表示整个环境,由多个互连的应用/服务组成?
答案 0 :(得分:2)
Docker哲学绝对要求为您拥有的每个应用程序,服务或后备资源创建单独的Dockerfiles,然后link它们。
您可以使用Docker Compose一起运行不同的Docker容器:Django和Rails示例。
此外,kubernetes或ECS等工具可让您管理整个环境的整个生命周期和基础架构,包括自动扩展,负载平衡等。