【docker】maven 打包docker的插件学习

ops/2024/11/14 2:59:30/

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添加的资源等。ADDCOPY

随着时间的推移,我们在 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 集成。

设计目标是:

  • 不要做任何花哨的事情。 Dockerfiles 是构建 Docker 项目的方式;这就是这个插件的用途。它们是强制性的。
  • 使 Docker 构建过程与 Maven 构建过程集成。如果绑定默认阶段,当您键入 时mvn package,您将获得一个 Docker 映像。当您输入 时mvn deploy,您的图像就会被推送。
  • 让目标记住你在做什么。您可以稍后再输入,不会mvn dockerfile:build有任何问题。这也消除了对类似的东西的需要;相反,你可以直接说.mvn dockerfile:tagmvn dockerfile:pushmvn dockerfile:build -DalsoPushmvn 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-jreMAINTAINER chengxuyuanshitangENTRYPOINT ["/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/libARG 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 的目录。yesnone
dockerfile.repository用于命名构建镜像的存储库nonone
dockerfile.tag构建 Dockerfile 时要应用的标记,该标记将附加到存储库。nolatest
dockerfile.build.pullNewerImage自动更新基础镜像。noTRUE
dockerfile.build.noCache构建镜像时不要使用缓存。noFALSE
dockerfile.build.cacheFromDocker 镜像用作缓存来源。pullNewerImage如果本地不存在或存在则提前拉取falsenonone
dockerfile.buildArgs自定义构建参数。nonone
dockerfile.build.squash将新构建的层压缩为一个新层(实验 API 1.25+)。noFALSE

下面是最近更新的文章:

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博客

dockerdocker compose 搭建私服-CSDN博客

docker】开放Docker端口-CSDN博客

dockermaven 打包docker的插件学习-CSDN博客

docker 】Windows10安装Docker Desktop - WSL update failed-CSDN博客





http://www.ppmy.cn/ops/29633.html

相关文章

【区块链】共识算法简介

共识算法简介 区块链三要素&#xff1a; 去中心化共识算法智能合约 共识算法作为区块链三大核心技术之一&#xff0c;其重要性不言而喻。今天就来简单介绍共识算法的基本知识。 最简单的解释&#xff0c;共识算法就是要让所有节点达成共识&#xff0c;保证少数服从多数&#x…

PostgreSQL自带的命令行工具02- createdb

PostgreSQL自带的命令行工具02- createdb 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777createdb 是 Postgr…

区块链 | IPFS 工作原理入门

区块链和IPFS&#xff08;InterPlanetary File System&#xff09;是两种互补的技术&#xff0c;各自在分布式系统中扮演着重要的角色。虽然它们有不同的设计目标和应用场景&#xff0c;但结合起来使用可以提供更加强大和灵活的分布式解决方案。以下是区块链和IPFS工作原理的入…

【webrtc】MessageHandler 9: 基于线程的消息处理:执行Port销毁自己

Port::Port 构造的时候,就触发了一个异步操作,但是这个操作是要在 thread 里执行的,因此要通过post 消息 MSG_DESTROY_IF_DEAD 到thread跑:port的创建并米有要求在thread中 但是port的析构却在thread里 这是为啥呢?

【java超方便的导入导出工具类】SpringBoot操作Excel导入和导出

Excel导入和导出 一、前期准备 1、首先导入主要的依赖 <dependencies><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><depende…

网盘——分享文件——逻辑设计

本文主要讲解关于网盘文件操作部分的分享文件的逻辑设计部分&#xff0c;主要步骤如下&#xff1a; 目录 1、实施步骤&#xff1a; 2、代码实现 2.1、添加分享文件协议 2.2、添加取消槽函数 2.3、关联取消选择的槽函数 2.4、添加取消槽函数的定义 2.5、添加全选函数槽函…

Tire 字典树、前缀树

字典树&#xff08;又称单词查找树或Trie树&#xff09;是一种树形结构&#xff0c;它是哈希树的变种&#xff0c;通常用于统计、排序和保存大量的字符串&#xff08;但不仅限于字符串&#xff09;。字典树在搜索引擎系统中常用于文本词频统计。它的主要优点在于能够利用字符串…

Word文件后缀

Word文件后缀 .docx文件为Microsoft Word文档后缀名&#xff0c;基于XML文件格式 .dotm为Word启用了宏的模板 .dotx为Word模板 .doc为Word97-2003文档&#xff0c;二进制文件格式 参考链接 Word、Excel 和 PowerPoint 的文件格式参考 Learn Microsoft