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

Docker container granularity: SOA or monoliths?

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

现在说我想 "Dockerify" 我的整个应用架构。我会为每种类型的组件(myappdataservicemysqlcrmservice 等)写 1 个 Docker 图像还是写一个 "monolithic" 包含所有应用程序、服务、数据库、消息代理 (JMS) 等的容器?

我确定我可以用任何一种方式做到这一点,但我的问题的根源是:Are Docker containers intended to house/contain a single app, or are他们打算代表一个完整的 环境 ,由多个相互关联的 apps/services?

例如,

Docker 哲学明确要求为您拥有的每个应用程序、服务或支持资源创建单独的 Docker 文件,然后 link 它们。

您可以将 Docker Compose 用于 运行 不同的 Docker 容器:Django and Rails 个示例。

此外,kubernetes or ECS 等工具允许您管理整个环境的完整生命周期和基础架构,包括自动缩放、负载平衡等。