Docker:Dockerize Tomcat 应用程序 - 最佳实践



我有一个Java应用程序,它目前在tomcat实例中运行。此应用程序有 3-6 个(取决于用途)网络应用程序。我想将此应用程序打包到 docker 容器中,以设置新的测试系统基础结构。

最好的策略是什么?将每个 Web 应用程序打包到基于 tomcat 的容器中,并将其与 docker-compose 绑定(我更喜欢这样,但我不确定这是否可能?)或者拥有一个基于 tomcat 的容器,其中包含所有 Web 应用程序。

有人有这方面的经验吗?

这取决于你想要什么 - 你正在寻找什么没有简单的答案。

我看到的选项是:

  • 所有内容都在一个容器中:在构建映像时,将所有 WAR 文件/目录复制到容器中,然后启动它。这意味着您只需要担心单个命令即可启动/停止/重新启动,但这也意味着所有应用程序共享相同的生命周期和相同的资源(CPU、JVM 堆、线程池等)。
  • 另一种方法是运行类似 Docker Compose 的东西,其中每个应用程序都有一个单独的映像,并启动一个单独的容器。使用 Docker Compose,您可以将它们链接在一起,以便它们可以相互查看,并且可以根据需要启动/停止/重新启动/删除/重新创建它们。如果需要,您甚至可以更进一步并启动同一应用程序的多个实例 - 这不适用于其他方法。

如您所见,每种方法都有优点和缺点,这实际上取决于您想要什么。第二种方法(每个应用使用单个映像/容器)更灵活,但需要更多的配置,并且开销更大,因为您将运行 6 个 Tomcat 实例,而不仅仅是一个。

对于它的价值,我在我的用例中使用第二种方法。我有一个在所有应用程序之间共享的基本 Tomcat 映像,它基于官方的 Docker Tomcat 映像,并添加了一些常见的东西。然后,每个应用程序都有自己的映像和额外的配置,然后我使用 Docker Compose 将它们全部拉到一起。

如果您不关心增加的灵活性,并且所有应用程序将始终具有相同的生命周期,那么第一种方法也可能有效 - 这完全取决于您要做什么。