docker使用Dockerfile构造java服务镜像,是war包好还是jar包好?

1.我刚学docker,目前理解是,war包的优势是方便更新代码包,挂载宿主机目录到容器webapps目录即可。
2.jar包好像是更新就得重新生成镜像(还没找到能动态更新的方法)
3.或者说,从别的方面说说两者的优缺点
4.请各位不吝赐教。

jar包好
现在构造镜像一般都是基于微服务的,使用SpringBoot打包jar包是最方便的

至于重新生成镜像,这个不算问题把,CI/CD已经很方便了,第一次的发布流程脚本弄好了,后面流水线都是一键部署的

  J AR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。
  JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

简单来说,Java编译好之后生成class文件,但如果直接发布这些class文件的话会很不方便,所以就把许多的class文件打包成一个jar,jar中除了class文件还可以包括一些资源和配置文件,通常一个jar包就是一个java程序或者一个java库。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。
war(Web application Archive),与jar基本相同,它通常表示这是一个Java的Web应用程序的包,是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。tomcat这种Servlet容器会认出war包并自动部署。

war包中的文件按照一定目录结构来组织。其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。

简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

WAR文件代表了一个Web应用程序,JAR是类的归档文件。
所有的包都是用jar打的,只不过目标文件的扩展名不一样。

2.jar包好像是更新就得重新生成镜像(还没找到能动态更新的方法)

看到你这个问题,我给你说一下解决方案,其实跟war包一样。
在你创建你的docker容器的时候,run命令加一个参数 -v 宿主机路径:容器路径,到时候你更新的时候,直接将jar包放到宿主机路径下面即可,重新启动容器。

给你一个完整的run
docker run -e TZ="Asia/Shanghai" -d -it -p 9001:9001 -e JAVA_OPTS='-Xmx500m' -v /data/minio/:/app --workdir="/app" --name minioserver hub.c.163.com/library/java java -jar /app/minioserver-0.0.1-SNAPSHOT.jar /bin/bash

根据不同的场景吧