2

我正在尝试从 maven 中创建一个 docker 映像,其中包括来自不同 maven 项目的工件。但是我复制的示例似乎不起作用。

我认为这里的问题是我并不真正了解程序集是如何工作的,所以我想在这里寻求帮助。我已经建立了一个人为的简单示例来说明我在这里尝试做的事情:

https://github.com/sodved/java-docker-demo/tree/0.0.1-0

pom.xml
sod-java/pom.xml
sod-java/src/main/java/sodved/Sod.java
sod-docker/pom-depency.xml
sod-docker/pom.xml
sod-docker/src/main/docker/setup.sh
sod-docker/src/main/docker/Dockerfile
sod-docker/src/main/docker/run.sh

所以我的项目有两个模块:

  • sod-java,它构建一个可执行的 jar(它只是将一个文件写入/tmp/sod.txt
  • sod-docker 使用 Dockerfile 创建一个 java alpine 镜像
    • setup.sh 在构建映像时运行。它运行java来创建/tmp/sod.txt
    • run.sh 是默认命令写入/tmp/sod.txt文件的内容

<assembly>到目前为止,我已经尝试了两种内联方法:

在这两种情况下,我都没有看到程序集或 docker 插件创建的 tar 文件中复制的 jar 文件,因此在尝试在 DockerfileCOPY命令中引用 jar 时出现错误。

我知道这个例子有点做作。但它简单且符合我们在工作中做事的标准方式。所以我在工具、布局等方面没有很大的灵活性。

真实案例用于构建数据库镜像。获取基本图像,运行 java 代码来操作数据库,保存为新图像以供下游使用。

TLDR: 如何指定 groupId、artifactId、version 并在我的 docker 映像中包含相应的工件。docker 源本身不包含 java。

4

1 回答 1

0

好的,已经想通了。

问题是 pom.xml 指定了一些外部配置

<external>
    <type>properties</type>
    <prefix>docker</prefix>
    <mode>override</mode>
</external>

但正如这里的文档(http://dmp.fabric8.io/#property-configuration)所说,这意味着<build>pom.xml 中的配置(包括我的程序集)将被忽略。我不确定为什么我们的标准使用外部配置,会追赶我们的运维人员。但是删除此<external>部分,一切正常。

于 2020-04-07T10:20:13.337 回答