docker-maven-plugin
GitHub地址:https://github.com/spotify/docker-maven-plugin
您可以使用此插件创建一个 Docker 映像,其中包含从 Maven 项目构建的工件。例如,Java 服务的构建过程可以输出运行该服务的 Docker 映像。
该插件是 Spotify 使用的最初 Maven 插件,用于从 Java 服务构建 Docker 镜像。它最初创建于 2014 年,当时我们第一次开始尝试 Docker。该插件能够 Dockerfile
根据 pom.xml 文件中的配置为您生成图像、使用/FROM
添加的资源等。ADD
COPY
随着时间的推移,我们在 Spotify 意识到从 Java 项目构建 Docker 镜像的最简单方法是让开发人员编写Dockerfile
. 该插件围绕生成 Dockerfile、将项目目录复制到“暂存”目录以用作 Docker 构建上下文等的行为,最终导致我们的用户产生很多不必要的困惑,这些困惑源于引入额外的抽象和需求用于在 Docker 提供的基础上进行配置。
This repository has been archived by the owner on Mar 21, 2022. It is now read-only.
该存储库已由所有者于 2022 年 3 月 21 日存档。它现在是只读的。
状态:不活跃,我们建议您改用dockerfile-maven。
dockerfile-maven
GitHub地址:GitHub - spotify/dockerfile-maven: MATURE: A set of Maven tools for dealing with Dockerfiles
用法:https://github.com/spotify/dockerfile-maven/blob/master/docs/usage.md
This repository has been archived by the owner on Apr 1, 2022. It is now read-only.
该存储库已由所有者于 2022 年 3 月 31 日存档。它现在是只读的。
状态:成熟
目前,我们不会开发或接受新功能,甚至不会修复非关键错误。
这个 Maven 插件将 Maven 与 Docker 集成。
设计目标是:
- 不要做任何花哨的事情。
Dockerfile
s 是构建 Docker 项目的方式;这就是这个插件的用途。它们是强制性的。 - 使 Docker 构建过程与 Maven 构建过程集成。如果绑定默认阶段,当您键入 时
mvn package
,您将获得一个 Docker 映像。当您输入 时mvn deploy
,您的图像就会被推送。 - 让目标记住你在做什么。您可以稍后再输入,不会
mvn dockerfile:build
有任何问题。这也消除了对类似的东西的需要;相反,你可以直接说.mvn dockerfile:tag
mvn dockerfile:push
mvn dockerfile:build -DalsoPush
mvn dockerfile:build dockerfile:push
- 与 Maven 构建反应器集成。您可以在另一个项目中依赖一个项目的 Docker 镜像,Maven 会按照正确的顺序构建项目。当您想要运行涉及多个服务的集成测试时,这非常有用。
该插件需要 Java 7 或更高版本以及 Apache Maven 3 或更高版本(dockerfile-maven-plugin <=1.4.6 需要 Maven >= 3,对于其他情况,Maven >= 3.5.2)。要运行集成测试或在实践中使用该插件,需要有效的 Docker 设置。
例子
配置实际的插件来构建您的图像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 chengxuyuanshitang
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/demo/demo.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/demo/lib
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/demo/demo.jar
构建生命周期
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
Maven 目标
目标 | 描述 | 默认阶段 |
dockerfile:build | 从 Dockerfile 构建 Docker 映像。 | package |
dockerfile:tag | 标记 Docker 映像。 | package |
dockerfile:push | 将 Docker 映像推送到存储库。 | deploy |
跳过绑定到 Maven 阶段的 Docker 目标
Maven选项 | 它有什么作用? | 默认值 |
dockerfile.skip | 禁用整个 dockerfile 插件;所有目标都变得无效。 | FALSE |
dockerfile.build.skip | 禁用构建目标;它变成了无操作。 | FALSE |
dockerfile.tag.skip | 禁用标签目标;它变成了无操作。 | FALSE |
dockerfile.push.skip | 禁用推送目标;它变成了无操作。 | FALSE |
例如,要跳过整个 dockerfile 插件:
mvn clean package -Ddockerfile.skip
构建阶段
Maven选项 | 它有什么作用? | 必需的 | 默认值 |
dockerfile.contextDirectory | 包含要构建的 Dockerfile 的目录。 | yes | none |
dockerfile.repository | 用于命名构建镜像的存储库 | no | none |
dockerfile.tag | 构建 Dockerfile 时要应用的标记,该标记将附加到存储库。 | no | latest |
dockerfile.build.pullNewerImage | 自动更新基础镜像。 | no | TRUE |
dockerfile.build.noCache | 构建镜像时不要使用缓存。 | no | FALSE |
dockerfile.build.cacheFrom | Docker 镜像用作缓存来源。pullNewerImage如果本地不存在或存在则提前拉取false | no | none |
dockerfile.buildArgs | 自定义构建参数。 | no | none |
dockerfile.build.squash | 将新构建的层压缩为一个新层(实验 API 1.25+)。 | no | FALSE |
下面是最近更新的文章:
【docker 】 安装docker(centOS7)-CSDN博客
【docker】常用命令-CSDN博客
【docker】centos7配置docker镜像加速_docker仓库加速地址-CSDN博客
【docker】Hello World-CSDN博客
【docker 】Compose 使用介绍_docker compose 使用-CSDN博客
【docker 】Compose安装-CSDN博客
【docker 】Dockerfile指令学习-CSDN博客
【docker】网络使用和配置_docker 启动使用host mode-CSDN博客
【docker】数据管理-CSDN博客
【docker】安装openjdk-CSDN博客
【docker】Spring Boot3.x 打包 Docker容器-CSDN博客
【docker】docker compose 搭建私服-CSDN博客
【docker】开放Docker端口-CSDN博客
【docker】maven 打包docker的插件学习-CSDN博客
【docker 】Windows10安装Docker Desktop - WSL update failed-CSDN博客