Docker容器粒度:SOA还是庞然大物?

目前,我有一个Java Web应用程序,它是由半打微服务支持的,每个微服务都与1+支持资源(数据库,第三方REST服务,CRM,遗留系统,JMS等)进行通信。 这些组件中的每一个都存在于1个以上的虚拟机上。 因此,架构如下:

  • myapp.war位于myapp01.example.commyapp02.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的组件( myappdataservicemysqlcrmservice等)编写1个Docker镜像,还是我会写一个包含所有应用程序,服务,DB,消息代理(JMS)等的“单片”容器?

我确信我可以做到这一点,但我的问题的根源是这样的: Docker容器是为了容纳/包含一个应用程序,还是代表整个环境 ,由多个互连的应用程序/服务组成?

Docker哲学明确地规定为每个应用程序,服务或后备资源创build单独的Docker文件,然后将它们链接起来。

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

而且,像kubernetes或ECS这样的工具可以让您pipe理整个环境的整个生命周期和基础设施,包括自动扩展,负载平衡等。