fabric8io docker-maven-plugin 组件和外部工件
fabric8io docker-maven-plugin assembly and external artifact
我正在尝试从 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>
:
- https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom-depency.xml 是我的第一次尝试。在程序集中使用
dependecySet
。但是我注意到依赖项甚至没有包含在 /target
文件夹中(我假设是因为没有实际的 java 代码可以在 sod-docker 中编译,所以没有复制依赖项) .
- https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom.xml 是我的第二次尝试。它首先明确地将工件复制到
/target
文件夹中(有效)。然后在程序集中使用 file
尝试复制文件。
在这两种情况下,我都没有看到程序集或 tar 插件创建的 tar 文件中复制的 jar 文件,因此在尝试引用 jar 时出现错误在 Dockerfile COPY
命令中。
我知道这个例子有点做作。但它简单且符合我们在工作中做事的标准方式。所以我在工具、布局等方面没有太多的灵活性。
真实案例用于构建数据库镜像。获取基本图像,运行 java 操作数据库的代码,另存为新图像以供下游使用。
TLDR:
如何指定 groupId、artifactId、version 并将相应的工件包含在我的 docker 图像中。 docker 源本身不包含 java.
好的,明白了。
问题是 pom.xml 指定了一些外部配置
<external>
<type>properties</type>
<prefix>docker</prefix>
<mode>override</mode>
</external>
但是正如此处的 doco (http://dmp.fabric8.io/#property-configuration) 所说,这意味着 pom.xml 中的 <build>
配置(包括我的程序集)将被忽略。我不确定为什么我们的标准使用外部配置,会追查我们的操作人员。但是删除这个 <external>
部分,一切正常。
我正在尝试从 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
文件的内容
- setup.sh 在构建镜像时是 运行。它 运行 是 java 创建
到目前为止,我已经尝试了两种内联方法 <assembly>
:
- https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom-depency.xml 是我的第一次尝试。在程序集中使用
dependecySet
。但是我注意到依赖项甚至没有包含在/target
文件夹中(我假设是因为没有实际的 java 代码可以在 sod-docker 中编译,所以没有复制依赖项) . - https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom.xml 是我的第二次尝试。它首先明确地将工件复制到
/target
文件夹中(有效)。然后在程序集中使用file
尝试复制文件。
在这两种情况下,我都没有看到程序集或 tar 插件创建的 tar 文件中复制的 jar 文件,因此在尝试引用 jar 时出现错误在 Dockerfile COPY
命令中。
我知道这个例子有点做作。但它简单且符合我们在工作中做事的标准方式。所以我在工具、布局等方面没有太多的灵活性。
真实案例用于构建数据库镜像。获取基本图像,运行 java 操作数据库的代码,另存为新图像以供下游使用。
TLDR: 如何指定 groupId、artifactId、version 并将相应的工件包含在我的 docker 图像中。 docker 源本身不包含 java.
好的,明白了。
问题是 pom.xml 指定了一些外部配置
<external>
<type>properties</type>
<prefix>docker</prefix>
<mode>override</mode>
</external>
但是正如此处的 doco (http://dmp.fabric8.io/#property-configuration) 所说,这意味着 pom.xml 中的 <build>
配置(包括我的程序集)将被忽略。我不确定为什么我们的标准使用外部配置,会追查我们的操作人员。但是删除这个 <external>
部分,一切正常。