目前,我们不会开发或接受新功能,甚至不会修复非关键错误。
这个 Maven 插件将 Maven 与 Docker 集成。
设计目标是:
Dockerfile
是构建 Docker 项目的方式;这就是这个插件的用途。它们是强制性的。mvn package
时,您将获得一个 Docker 映像。当您输入mvn deploy
时,您的映像将被推送。mvn dockerfile:build
以及稍后的mvn dockerfile:tag
和稍后的mvn dockerfile:push
没有问题。这也消除了对mvn dockerfile:build -DalsoPush
之类的需要;相反,你可以只说mvn dockerfile:build dockerfile:push
。该项目遵守开放行为准则。通过参与,您应该遵守此准则。
请参阅变更日志以获取版本列表
该插件需要 Java 7 或更高版本以及 Apache Maven 3 或更高版本(dockerfile-maven-plugin <=1.4.6 需要 Maven >= 3,对于其他情况,Maven >= 3.5.2)。要运行集成测试或在实践中使用该插件,需要有效的 Docker 设置。
有关更多示例,请参阅集成测试目录。
特别是,高级测试展示了由两个使用helios-testing
进行集成测试的微服务组成的完整服务。
这将配置实际的插件以使用mvn package
构建图像并使用mvn deploy
推送它。当然你也可以明确地说mvn dockerfile:build
。
< plugin >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-plugin</ artifactId >
< version >${dockerfile-maven-version}</ version >
< executions >
< execution >
< id >default</ id >
< goals >
< goal >build</ goal >
< goal >push</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< repository >spotify/foobar</ repository >
< tag >${project.version}</ tag >
< buildArgs >
< JAR_FILE >${project.build.finalName}.jar</ JAR_FILE >
</ buildArgs >
</ configuration >
</ plugin >
相应的Dockerfile
可能如下所示:
FROM openjdk:8-jre
MAINTAINER David Flemström <[email protected]>
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar
重要提示
引用构建工件的最 Maven 风格的方法可能是使用project.build.directory
变量来引用“目标”目录。但是,这会产生绝对路径,而 Dockerfile 中的 ADD 命令不支持该绝对路径。任何此类源都必须位于 Docker 构建的上下文内,因此必须通过相对路径引用。参见#101
不要使用${project.build.directory}
作为引用构建目录的方式。
在您的构建中使用此插件有很多优点。
该插件可让您更一致地利用 Docker 缓存,通过在映像中缓存 Maven 依赖项来极大地加快构建速度。它还鼓励避免使用maven-shade-plugin
,这也大大加快了构建速度。
你不再需要说这样的话:
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
相反,只需说:
mvn deploy
通过基本配置,这将确保在正确的时间构建和推送映像。
您可以依赖另一个项目的 Docker 信息,因为该插件在构建 Docker 映像时会附加项目元数据。只需将此信息添加到任何项目中即可:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
现在,您可以阅读有关您所依赖的项目的 Docker 镜像的信息:
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
这对于您想要另一个项目的 Docker 镜像的最新版本的集成测试来说非常有用。
请注意,您必须在 POM(或父 POM)中注册 Maven 扩展才能支持docker-info
类型:
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
您的项目如下所示:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
您现在可以将这些项目与 Fig 或 docker-compose 或其他与 Dockerfiles 配合使用的系统一起使用。例如, docker-compose.yml
可能如下所示:
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
现在, docker-compose up
和docker-compose build
将按预期工作。
请参阅使用文档。
请参阅身份验证文档。
要削减 Maven 版本:
mvn clean [-B -Dinvoker.skip -DskipTests -Darguments='-Dinvoker.skip -DskipTests']
-Dgpg.keyname=<key ID used for signing artifacts>
release:clean release:prepare release:perform
我们使用gren
在 Github 中创建 Release:
gren release