Docker容器粒度:SOA还是整体?

时间:2015-07-04 18:57:49

标签: architecture docker components

目前我有一个由半打左右的微服务支持的Java Web应用程序,其中每个微服务与1个以上的后备资源(DB,第三方REST服务,CRM,遗留系统,JMS等)进行通信)。这些组件中的每一个都存在于1个以上的VM上。因此架构如下:

  • myapp.war同时存在于myapp01.example.commyapp02.example.com
    • 连接dataservice.war生活在dataservice01.example.comdataservice02.example.commysql01.example.com连接到myapp.war
    • crmservice.war也会与crmservice01.example.com上的http://some-3rd-part-crm.example.com相关联,myapp连接到dataservice

现在说我想&#34; Dockerify&#34;我的整个应用架构。我会为每种类型的组件(mysqlcrmservice[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容器是用于存放/包含单个应用,还是用于表示整个环境,由多个互连的应用/服务组成?

1 个答案:

答案 0 :(得分:2)

Docker哲学绝对要求为您拥有的每个应用程序,服务或后备资源创建单独的Dockerfiles,然后link它们。

您可以使用Docker Compose一起运行不同的Docker容器:DjangoRails示例。

此外,kubernetesECS等工具可让您管理整个环境的整个生命周期和基础架构,包括自动扩展,负载平衡等。