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

我有一个java应用程序,目前运行在一个tomcat实例内。 这个应用程序有3-6(取决于使用)webapps。 我想将这个应用程序打包到docker容器中来build立一个新的testing系统基础架构。

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

有没有人有经验呢?

这取决于你想要什么 – 没有简单的答案,你在找什么。

我看到的选项是:

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

正如你所看到的,每种方法都有优点和缺点,这取决于你想要什么。 每个应用程序使用单个映像/容器的第二种方法更加灵活,但需要更多的configuration,并且会有更多的开销,因为您将运行6个Tomcat实例,而不是仅运行一个。

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

如果你不关心增加的灵活性和所有的应用程序将始终具有相同的生命周期,那么第一种方法也可能工作 – 这一切都取决于你想做什么。