将war文件映像放入docker容器是一个好习惯吗?

我是docker工人。 我有一个Spring启动应用程序,我想要使用docker进行部署和运行。 将战争文件图像放在容器中是否是一个好习惯,或者最好放置一个jar子? 为什么?

PS一旦我读到“制造jar子而不是战争”:-)更好,但不知道背后的原因。

为您的应用程序构buildDocker镜像的主要原因之一是提供一个人造物,人们可以在没有安装和pipe理外部软件依赖项的情况下运行(如运行战争文件的应用程序服务器)。

从容器用户的angular度来看,将代码打包成jar或war文件还是Fortran二进制文件都没有区别。 他们所做的只是运行一个容器图像。

从你身边,执行Docker构build和configurationpipe理,打包jar文件和复制将是比尝试设置和configuration应用服务器进行打包,然后将每个发行版部署到应用服务器更简单的解决scheme。 请参阅Ohmens对java构build的更多技术组件的回答 。

马特的回答是正确的,但你必须考虑一些进一步的观点。

  • 更新应用程序服务器: tomcat或glassfish的docker映像由负责的公司维护。 如果他们发现一个令人讨厌的(安全)错误,他们会修复它,并将该图像的新版本推送到docker中心。 要将容器更新为安全版本,您只需重新构build映像并运行新版本即可。 如果将应用程序服务器捆绑到jar ,则必须重新编译整个项目才能使用该更新的版本。 顺便说一句,大多数应用程序服务器都有自动部署机制来轻松部署战争。
  • Dockerscaching:如果你从一个java基本的图像构build一个图像,并简单地复制你的胖jar子,你的整个图像由一个大的层组成。 如果您构build应用程序的另一个版本,那么这个大jar文件会发生变化,导致docker创build另一个大图层。 这两个大图层都需要光盘上的空间。 另一方面,如果您将“小型”war文件部署到应用程序服务器,则两个映像将共享所有层,直到具有war文件的层。 通过这些机制,docker工人可以提高光盘使用率并加快构build时间。