【发布时间】:2019-03-27 19:07:24
【问题描述】:
我有一个 maven java 项目,它 docker builds 一个 docker 映像,然后 docker saves 使用 io.fabric8.docker-maven-plugin 插件将该映像作为构建的工件。
当我构建 docker 映像时,我想获取大小并将其添加到元数据中,这样我们就可以看到未压缩之前的映像有多大。
io.fabric8.docker-maven-plugin 插件无法获取生成的 docker 图像的确切大小,所以我目前正在使用org.codehaus.mojo.exec-maven-plugin 插件来获取图像的大小,如下所示:
<plugin>
<!-- generate metadata about docker image -->
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>generate-docker-metadata</id>
<phase>generate-resources</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>docker</executable>
<commandlineArgs>image inspect ${project.docker.image}:${project.version} --format='{{.Size}}' >> ${project.basedir}/src/main/resources/META-INF/Docker-Image-Size</commandlineArgs>
<workingDirectory>.</workingDirectory>
</configuration>
</execution>
</executions>
</plugin>
目前我可以将输出放入Docker-Image-Size 文件中,但我需要一种方法将其作为属性提供,该属性可以在生成元数据文件的元数据部分中引用。
如何将此 exec 输出保存到 pom.xml 文件的 <properties>/<properties> 部分,以便稍后在不同阶段使用?
我需要使用属性文件,还是可以将其保存为${docker.image.size}?
【问题讨论】:
-
我认为这在 Maven 的一次运行中是不可能的。相反,您可以先运行目标或脚本来操作 pom,然后再启动 Maven 构建。
-
问题是直到我用
mvn构建图像时我才知道大小。鉴于当我运行mvn install时它会构建映像,只有这样我才能将映像存在于主机上以用作docker inspect命令的输入。 -
AFAIK 您无法在构建过程中更改 POM。所以我想答案是你要求的行为是不可能的。
-
将 docker 图像查询的结果写入目标中的临时文件,或直接写入元数据文件。
标签: java maven docker properties