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

Lin*_*ina 7 docker spring-boot dockerfile

我是码头工人的新手.我有一个Spring-boot应用程序,我想使用docker部署和运行它.将war文件图像放入容器中是不是一个好习惯,或者最好将jar文件放入容器中?为什么?

PS一旦我读到"制作罐子,而不是战争"更好:-)但不知道背后的原因.

Ohm*_*men 6

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

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

  • 关于缓存的好点子。胖罐子可以[使 docker 更加友好](https://bsideup.blogspot.com.au/2015/04/spring-boots-fat-jars-vs-docker.html)。 (2认同)

Mat*_*att 5

为应用程序构建docker镜像的主要原因之一是提供一个人工可以运行的人工制品,而无需安装和管理外部软件依赖项(如运行war文件的app服务器).

从容器用户的角度来看,将代码打包在jar或war文件中还是作为fortran二进制文件都没有区别.他们所做的就是运行一个容器图像.

从您的角度来看,进行Docker构建和配置管理,打包jar文件和复制将比尝试设置和配置应用服务器以打包然后将每个版本部署到应用服务器更简单.有关Java构建的一些更多技术组件,请参阅Ohmens答案.