我已经使用自定义 Dockerfile 为 Servlet WebApp 成功创建了一个带有 fabric8 插件的 docker 映像。
该图像基于tomcat,因此我需要将应用程序放入tomcat/webapps
以优化图像,我不是直接插入战争,而是在两个单独的层中插入它的扩展内容:一层用于WEB-INF\lib
所有其他层。
Image Layers:
- WEB-INF\classes and resources
- WEB-INF\lib
- tomcat (base layer)
这样,如果我创建一个新版本但库与旧版本相同,远程服务器只需要拉应用层
我正在从 maven-war-plugin 生成的文件夹“target/MyProject”中复制战争的内容,然后从它创建“MyProject.war”但是这个文件夹不包含META-INF\MANIFEST.MF
文件(它是直接在战争?)
有没有办法在某个文件夹中创建清单文件,以便我可以将其复制到 docker 映像中?
这里是 pom.xml 的一部分
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifestEntries>
/*...*/
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.30.0</version>
<extensions>true</extensions>
<configuration>
<images>
<image>
<name>${project.version}-${docker-image-tag}</name>
<build>
<contextDir>${project.basedir}/src/main/docker</contextDir>
<assembly>
<name>target</name>
<inline>
<fileSets>
<fileSet>
<directory>${project.build.directory}/${project.build.finalName}</directory>
<outputDirectory>slimWar</outputDirectory>
<excludes>
<exclude>WEB-INF\lib\**</exclude>
</excludes>
<useDefaultExcludes>false</useDefaultExcludes>
</fileSet>
<fileSet>
<directory>${project.build.directory}/${project.build.finalName}</directory>
<outputDirectory>libs</outputDirectory>
<includes>
<include>WEB-INF\lib\**</include>
</includes>
<useDefaultExcludes>false</useDefaultExcludes>
</fileSet>
</fileSets>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>