【问题标题】:Deploy multiple microservices depending on each other for packages to docker container将多个微服务相互依赖部署到 docker 容器中
【发布时间】:2019-06-15 16:13:26
【问题描述】:

我必须在 java 中将 微服务 部署到 docker 容器中,这些微服务相互依赖以构建包。就像应用程序 a 具有其他应用程序 b、c 和 d 所需的基本软件包一样,我 无法在没有 a 的情况下执行 mvn clean install docker:build 来构建 b、c 和 d。我是 docker 新手,有人可以建议我如何解决这个问题。

我在 pom 文件中使用 docker 插件,然后使用 mvn clean install -d docker:build 制作 docker 镜像。

【问题讨论】:

  • 您先构建,然后将构建的 jar 部署到 docker 容器中。
  • 除了依赖 microsvcs 的根本缺陷之外,您的构建还需要重构。要么拉出库中所需的包并为其添加依赖项,要么考虑构建模块,因为您的 docker 容器是一个微服务
  • 我一直在考虑 docker 容器是否可以相互访问,但我不清楚如何完成这个过程。
  • 容器无法访问彼此的文件系统。

标签: java docker docker-compose microservices


【解决方案1】:

这个问题有不同的解决方案:

  • 使用 maven(或 gradle),您可以为公共类创建一个 maven 项目,并将其作为依赖项导入到其他项目中
  • 不同项目中的重复代码。虽然这似乎不是一个好的解决方案,但它完全分离了项目之间的依赖关系。每个项目都必须从其他项目中被视为一个黑匣子,因此您不应该对其内部代码一无所知。例如,您应该能够在不影响整个环境的行为的情况下更改单个 docker 的编程语言。

更新答案:要使用 maven 依赖项,步骤如下:

  • 在项目 A 中查找项目 B 使用的类
  • 从项目 A 中删除这些类
  • 创建一个新项目 C
  • 将项目A中删除的类添加到项目C中
  • 构建并安装项目 C (mvn -install)
  • 更改项目A的pom以使用项目C的依赖
  • 构建项目 A
  • 将项目B的pom改为使用项目C的依赖
  • 构建项目 B
  • 使用唯一的 jar A.jar 为 A 创建 docker 镜像
  • 使用唯一的jar B.jar为B创建docker镜像

【讨论】:

  • 我在我们的 .m2 存储库中为常见的依赖项添加所需的依赖项,但由于 docker 容器是独立的,所以我不能在这里做同样的事情。
  • @RahulAnand 你必须创建一个包含所有依赖项的 jar。您必须在编译时使用依赖项。不是在您构建 docker 映像时。添加到docker的jar已经有了相关的依赖,所以docker的构建非常简单(只需要在里面复制一个jar就行了)
  • 我无法构建我的应用程序映像(应用程序 b),因为它试图找到具有 b 所需的依赖项(应用程序 a)的 jar,它给了我错误:无法在app:commonapp:jar:0.0.1-SNAPSHOT
  • @RahulAnand 你必须从项目 B 使用的项目 A 中提取类,并创建一个新项目 C 托管这些类。然后你需要在A和B中都导入新的项目C
  • @RahulAnand 检查解释每个步骤的更新答案。
猜你喜欢
  • 2021-05-12
  • 2016-07-22
  • 2018-06-10
  • 2011-12-03
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 2019-11-24
相关资源
最近更新 更多