【问题标题】:Dockerize Spring Boot Java app with Kafka, Zookeeper, and MongoDB [closed]使用 Kafka、Zookeeper 和 MongoDB 对 Spring Boot Java 应用程序进行 Dockerize [关闭]
【发布时间】:2016-10-14 00:18:37
【问题描述】:

总的来说,我是 Docker 和 Web 应用程序的初学者。我必须对一个使用 Kafka、Zookeeper 和 MongoDB 的大型 Spring Boot Java 应用程序进行 Dockerize 化。它还使用 Gradle 构建工具。 Dockerize 这个应用程序的最佳方法是什么?我应该将它 Dockerize 在一个映像中,还是为每个组件单独映像?

另外,如何将 Gradle 构建工具合并到 Dockerfile 中?

谢谢!

【问题讨论】:

  • “大型Java应用程序”目前如何部署或确保附属品Kafka、Zookeeper和MongoDB的存在和正确配置?这是一个重要的提示,您可以按照什么路线进入集装箱土地。您对“在 Dockerfile 中包含 Gradle 构建工具”的理解是什么,您的意思是 - 将 Dockerfile 视为一种 Makefile - 获得一些配方,即相关“调用”应写入文件中的 Dockerfile 的哪个语法元素?请提供更多细节。谢谢。
  • 所以应用程序使用 Spring Boot 运行。有一个名为“application.properties”的外部配置文件,其中包含 Kafka、Zookeeper 和 MongoDB 的配置。它通过命令行传递,如下所示:sudo -u root java -Dspring.config.location="location of config file" -jar javaApp.jar 关于将 Gradle 合并到 Dockerfile 中,我现在认为最好先让 Gradle 构建 JAR 文件,然后让 Docker 使用它来解耦 Gradle 和 Docker (如下所述)。

标签: java docker apache-kafka apache-zookeeper dockerfile


【解决方案1】:

由于您使用的是 Gradle,因此有一个 docker-gradle-plugin,您可以使用它来对您的 Java 应用程序进行 docker 化。

将多个应用程序放在一个 Docker 构建中并不是 Docker 的预期使用方式。已经有 Docker 镜像可用于 Kafka、ZooKeeper 和 MongoDB 等工具。您只需将它们用作单独的容器并将它们链接到您的 dockerized/non-dockerized Java 应用程序。

另外,如何将 Gradle 构建工具合并到 Dockerfile 中?

您实际上会将 Docker Build 合并到 Gradle 构建文件中。反之亦然。

【讨论】:

  • 是的,这是一个选项,您需要两个步骤。您可以创建一个基于 Gradle 创建的 jar 文件构建图像的 Dockerfile。然后你可以在这个 Dockerfile 上调用docker build。相反,如果您使用 docker-gradle-plugin,您可以将这两个步骤组合在一起。怎么做取决于你自己。
  • 如果我先让 Gradle 构建整个应用程序并制作 JAR 文件会怎样?然后我可以将 JAR 文件添加到 Dockerfile 中并按如下方式执行它:FROM java:7ADD /javaApp/build/libs/javaApp.jar javaApp.jarENTRYPOINT ["java","-jar","javaApp.jar" 你认为这是一种可行的方法吗?之后,我必须为 Kafka、Zookeeper 和 MongoDB 拉取并运行镜像,然后将它们链接到我的 Dockerized javaApp。
  • 正如我上面所说,这是一个可行的选择。但是你需要一些额外的步骤。不过,更正一次,您不需要声明ADD /javaApp/build/libs/javaApp.jar javaApp.jar。相反,您应该使您的 javaApp 在 Dockerfile 所在目录的主目录或子目录中可用。 Docker 本身会将该 jar 复制到映像中。 Docker 可能无法访问其上下文目录之外的任何文件。我尝试并得到了错误。而且,是的,在那之后,您只需按照您对其他图像所说的操作,“拉动并运行”。
  • 啊,是的,我明白了。因此,可能存在问题的一件事是我的 Java 应用程序依赖于 Kafka、Zookeeper 和 MongoDB。那么我不是首先需要启动 Kafka、Zookeeper 和 MongoDB 容器吗?然后我可以构建我的 Java 应用程序并将其 Dockerize 化。另外,在将容器链接在一起之前,我应该了解哪些主要概念?我正在考虑开始学习端口?抱歉,我是这一切的真正初学者,所以这一切对我来说都很陌生。
  • 您不需要运行其他容器来构建映像。但是,您需要在运行 Java 应用程序的图像之前运行它们。我的意思是启动容器。更简单的方法是创建一个 docker-compose 文件并将其他容器链接到您的 Java 应用程序。不用担心是初学者。我们都去过那里。
猜你喜欢
  • 2019-11-27
  • 2018-01-10
  • 2023-03-09
  • 2018-01-11
  • 2019-08-23
  • 2022-07-08
  • 1970-01-01
  • 2022-01-11
  • 2019-02-16
相关资源
最近更新 更多