网站建设介绍大全,个人网络销售平台,大型网站服务器配置,网站开发计划怎么写Spring Boot应用程序可以使用Dockerfiles容器化#xff0c;或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像#xff0c;您可以在任何地方运行。
1. Efficient Container Images
很容易将Spring Boot fat jar打包为docker映像。然而#xff0c;像在docke…Spring Boot应用程序可以使用Dockerfiles容器化或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像您可以在任何地方运行。
1. Efficient Container Images
很容易将Spring Boot fat jar打包为docker映像。然而像在docker映像中那样复制和运行fat jar有很多缺点。在不拆包的情况下运行fat jar总是会有一定的开销在容器化的环境中这是很明显的。另一个问题是将应用程序的代码及其所有依赖项放在Docker映像的一个层中是次优的。由于重新编译代码的次数可能比升级所使用的Spring Boot版本的次数要多因此最好将代码分开。如果将jar文件放在应用程序类之前的层中Docker通常只需要更改最底层并且可以从缓存中获取其他层。
1.1. Unpacking the Executable JAR
如果从容器中运行应用程序则可以使用可执行jar但将其扩展并以不同的方式运行通常也是一种优势。某些PaaS实现也可能选择在运行存档之前解包。例如Cloud Foundry就是这样运作的。运行解压缩存档文件的一种方法是启动适当的启动器如下所示:
$ jar -xf myapp.jar
$ java org.springframework.boot.loader.JarLauncher这实际上在启动时(取决于jar的大小)比从未分解的存档运行要稍微快一些。在运行时您不应该期望有任何差异。
一旦你解压缩了jar文件你还可以通过使用“自然的”main方法而不是JarLauncher来运行应用程序从而获得额外的启动时间提升。例如:
$ jar -xf myapp.jar
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication
在应用程序的main方法上使用JarLauncher有一个可预测的类路径顺序的额外好处。jar包含一个类路径。该文件在JarLauncher构造类路径时使用。
1.2. Layering Docker Images
为了更容易地创建优化的Docker映像Spring Boot支持向jar中添加一个层索引文件。它提供了一个层列表以及应该包含在这些层中的jar部分。索引中的层列表是根据层应该添加到Docker/OCI映像的顺序排序的。开箱即用支持以下层: dependencies (对于常规发布的依赖项) spring-boot-loader (对于所有在org/springframework/boot/loader下的东西) snapshot-dependencies (对于快照依赖项) application (适用于应用程序类和资源)
The following shows an example of a layers.idx file:
- dependencies:- BOOT-INF/lib/library1.jar- BOOT-INF/lib/library2.jar
- spring-boot-loader:- org/springframework/boot/loader/JarLauncher.class- org/springframework/boot/loader/jar/JarEntry.class
- snapshot-dependencies:- BOOT-INF/lib/library3-SNAPSHOT.jar
- application:- META-INF/MANIFEST.MF- BOOT-INF/classes/a/b/C.class2. Dockerfiles
虽然在Dockerfile中只需要几行就可以将Spring Boot fat jar转换为docker映像但我们将使用分层特性来创建优化的docker映像。当您创建包含layers索引文件的jar时spring-boot-jarmode-layertools jar将作为依赖项添加到jar中。有了这个jar放在类路径上您就可以以一种特殊模式启动应用程序这种模式允许引导代码运行与应用程序完全不同的东西例如提取层的东西。
layertools模式不能用于包含启动脚本的完全可执行的Spring Boot归档文件。在构建打算与layertools一起使用的jar文件时禁用启动脚本配置。
下面是使用layertools jar模式启动jar的方法:
$ java -Djarmodelayertools -jar my-app.jar这将提供以下输出:
Usage:java -Djarmodelayertools -jar my-app.jarAvailable commands:list List layers from the jar that can be extractedextract Extracts layers from the jar for image creationhelp Help about any command FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILEtarget/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT [java,-jar,/app.jar]
假设上面的Dockerfile在当前目录下你的docker镜像可以使用docker build .来构建或者可以选择指定应用程序jar的路径如下所示:
$ docker build --build-arg JAR_FILEpath/to/myapp.jar .