我正在尝试从 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
文件夹中(我假设因为在 sod-docker 中没有要编译的实际 java 代码,所以没有复制依赖项)。 - https://github.com/sodved/java-docker-demo/blob/0.0.1-0/sod-docker/pom.xml是我的第二次尝试。它首先明确地将工件复制到
/target
文件夹中(有效)。然后file
在程序集中使用来尝试复制文件。
在这两种情况下,我都没有看到程序集或 docker 插件创建的 tar 文件中复制的 jar 文件,因此在尝试在 DockerfileCOPY
命令中引用 jar 时出现错误。
我知道这个例子有点做作。但它简单且符合我们在工作中做事的标准方式。所以我在工具、布局等方面没有很大的灵活性。
真实案例用于构建数据库镜像。获取基本图像,运行 java 代码来操作数据库,保存为新图像以供下游使用。
TLDR: 如何指定 groupId、artifactId、version 并在我的 docker 映像中包含相应的工件。docker 源本身不包含 java。