【发布时间】:2020-03-16 04:53:18
【问题描述】:
目前我有一个 tomcat 网络服务器,它托管多个 .war 微服务(如果重要:spring-boot 应用程序)。升级应用程序时,我通过添加 myapp##005.war、myapp##006.war 等来使用 tomcat parallel deployment 功能,以实现零停机部署。
我想 dockerize 应用程序。但是什么最适合 java 应用 webservice 应用呢?
将war文件直接打包到容器中是否更好,这样每次重新部署都需要一个新的docker容器?或者 tomcat 应该作为没有应用程序的容器运行,并从共享的主机系统文件夹中挂载 war 文件(从而提供重新部署而无需重新部署 dockerimage)?
我能想到以下三种可能性:
- 将每个war文件作为
jar运行,而不是使用嵌入式tomcat,每个作为自己的docker容器?然后每个应用程序被解耦,但我不能再使用并行部署功能,因为我必须在另一个可以取代它之前杀死 jar。如果这是最好的方法,那么问题是:如何使用 docker 容器实现零停机部署? - 将每个war文件作为独立的tomcat运行,每个作为自己的docker容器?然后每个应用程序将被解耦,并且还可以使用并行部署。但是我必须在这里为每个 docker 容器中的每个应用程序启动一个显式的 tomcat 网络服务器,这可能会对主机系统性能产生负面影响?
- 作为docker运行一个独立的tomcat,并将所有*.war文件放在一个共享文件夹中进行部署?在这里,我仍然可以使用并行部署功能。但这不是与 docker 的想法背道而驰吗?战争应用程序不应该打包在容器内吗?性能和资源要求在这里可能是最好的,因为这只需要一个 tomcat。
哪种方法适合 java miroservices?
【问题讨论】:
-
我认为微服务需要“蓝绿色部署”,它允许以零停机时间重新部署容器。共享一个war文件不是一个好主意,因为你需要跟随docker容器,你所需要的必须是内部镜像,除了docker-compose文件。
-
虽然这是一个真正“主要基于意见”的问题,但它仍然是一个很好的问题。
标签: java spring spring-boot docker tomcat