Docker容器粒度:SOA还是庞然大物?
目前,我有一个Java Web应用程序,它是由半打微服务支持的,每个微服务都与1+支持资源(数据库,第三方REST服务,CRM,遗留系统,JMS等)进行通信。 这些组件中的每一个都存在于1个以上的虚拟机上。 因此,架构如下:
-
myapp.war
位于myapp01.example.com
和myapp02.example.com
- 连接到
dataservice.war
上的dataservice01.example.com
和连接到mysql01.example.com
dataservice02.example.com
-
myapp.war
还连接到crmservice.war
上的crmservice01.example.com
,它连接到http://some-3rd-part-crm.example.com
- 连接到
现在说我想“Dockerify”我的整个应用程序架构。 我会为每种types的组件( myapp
, dataservice
, mysql
, crmservice
等)编写1个Docker镜像,还是我会写一个包含所有应用程序,服务,DB,消息代理(JMS)等的“单片”容器?
我确信我可以做到这一点,但我的问题的根源是这样的: Docker容器是为了容纳/包含一个应用程序,还是代表整个环境 ,由多个互连的应用程序/服务组成?
Docker哲学明确地规定为每个应用程序,服务或后备资源创build单独的Docker文件,然后将它们链接起来。
您可以使用Docker Compose将不同的Docker容器一起运行: Django和Rails示例。
而且,像kubernetes或ECS这样的工具可以让您pipe理整个环境的整个生命周期和基础设施,包括自动扩展,负载平衡等。