【问题标题】:Microservice deployment --- simple jars vs docker containers微服务部署 --- 简单的 jar 与 docker 容器
【发布时间】:2018-06-10 08:25:57
【问题描述】:

我即将部署一组基于 JAVA 的微服务。 我很困惑是否:

  1. 通过“java -jar [JAR_NAME]”将它们作为简单的 jar 文件运行
  2. 在基于 JAVA 的 docker 容器中运行它们。
  3. 把它们当作战争来管理。

请为我提供每种实现的优缺点,因为如果我使用建议的最佳方法,这将为我省去很多麻烦 :)

提前致谢。

【问题讨论】:

  • 绝对是码头工人
  • 这是一个基于意见的问题/答案。每个人的利弊都会不同,所以很难回答。
  • 如果我使用jar方式呢?那我会不会对 Docker 提供的优势置若罔闻?如果我需要扩展我的应用程序怎么办?罐子能让我像码头工人一样顺利吗?如果是,那么如何?

标签: java docker war microservices continuous-deployment


【解决方案1】:

绝对是 Docker。使用容器化可为您提供最大的灵活性。

在您的第一种方法中,您的 jar 依赖于 Java。每当您创建新的虚拟机时,您都需要安装一组修复软件来支持您的应用程序。

第二种方法的好处,

首先,一切都将放在一个容器中。

您可以在容器中安装所有必需的软件,并且该容器可以是任何 VM 中的用户。您可以灵活地为每个微服务使用您选择的 java。只安装 docker,一切都会好起来的。

第二,Dev Prod Parity

如果您非常喜欢微服务架构和12-factor 应用程序。然后 docker 有助于支持许多因素。 您的 java 和其他软件将在您的所有环境中都是独一无二的。这意味着由于运行时环境的某些版本不匹配,您永远不会对它是否在 QA 中工作而不是在 Prod 中工作感到惊讶。

三、灵活性

如果你进入微服务架构,那为什么只有java。您也可以使用 GO、Python 或其他语言。此时,与其在每个 VM 上为每个平台安装运行时环境,不如在容器中拥有微服务。

最后,易于部署

您可以使用 docker-compose 或 docker swarm 在单个命令中运行 100 多个 mivroservice。

【讨论】: