当前位置: 首页 > article >正文

Maven插件之docker-maven-plugin

介绍

在持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了实现在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。

使用

配置 DOCKER_HOST

docker-maven-plugin 插件需要设置 Docker 地址为。

DOCKER_HOST=unix:///var/run/docker.sock

构造镜像

构建镜像可以使用一下两种方式

  • 将构建信息指定到 POM 中

    支持将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息配置在 POM 中

  • 使用已存在的 Dockerfile 构建。
    上述不支持的必须使用Dockerfile

插件配置见附录

执行命令

mvn clean package docker:build #只执行 build 操作mvn clean package docker:build -DpushImage   #执行 build 完成后 push 镜像mvn clean package docker:build -DpushImageTag #执行 build 并 push 指定 tag 的镜像mvn docker:build -DdockerImageTags=1.0.0-dev docker:push  #镜像指定tag

注意:这里必须指定至少一个 imageTag,它可以配置到 POM 中,也可以在命令行指定。

绑定Docker 命令到 Maven 各个阶段

我们可以绑定 Docker 命令到 Maven 各个阶段,我们可以把 Docker 分为 buildtagpush,然后分别绑定 Maven 的 packagedeploy 阶段,此时,我们只需要执行mvn deploy就可以完成整个 build、tag、push操作了,当我们执行mvn build就只完成 build、tag 操作。除此此外,当我们想跳过某些步骤或者只执行某个步骤时,不需要修改 POM 文件,只需要指定跳过 docker 某个步骤即可。比如当我们工程已经配置好了自动化模板了,但是这次我们只需要打镜像到本地自测,不想执行 push 阶段,那么此时执行要指定参数-DskipDockerPush就可跳过 push 操作了。

如果我们想跳过 docker 某个过程时,只需要:

  • -DskipDockerBuild 跳过 build 镜像
  • -DskipDockerTag 跳过 tag 镜像
  • -DskipDockerPush 跳过 push 镜像
  • -DskipDocker 跳过整个阶段

安全认证配置

当我们 push 镜像到 Docker 仓库中时,不管是共有还是私有,经常会需要安全认证,登录完成之后才可以进行操作。当然,我们可以通过命令行 docker login -u user_name -p password docker_registry_host 登录,但是对于自动化流程来说,就不是很方便了。使用 docker-maven-plugin 插件我们可以很容易实现安全认证。

首先在 Maven 的配置文件 setting.xml 中增加相关 server 配置,主要配置 Docker registry用户认证信息。

<servers><server><id>docker-registry</id><username>user</username><password>12345678</password><configuration><email>xxxx@xxxx</email></configuration></server>
</servers>

然后只需要在 pom.xml 中使用 server id 即可。

然后只需要在 pom.xml 中使用 server id 即可。

附录

pom

        <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><imageName>${docker.image.prefix}/${project.name}:${project.version}-dev</imageName><!-- dockerfile所在目录 --><dockerDirectory>${basedir}/src/main/docker</dockerDirectory><dockerHost>${docker.host}</dockerHost><!-- maven settings.xml 中配置的docker 仓库的 server  --><serverId>docker-registry</serverId><!-- 以下是docker build 的命令 《《《《《 --><baseImage>java</baseImage><maintainer>docker_maven docker_maven@email.com</maintainer><workdir>/ROOT</workdir><cmd>["java", "-version"]</cmd><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><!-- 》》》》》》  --><resources><resource><targetPath>/ROOT</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration><executions><execution><id>build-image</id><phase>package</phase><goals><goal>build</goal></goals></execution><execution><id>tag-image</id><phase>package</phase><goals><goal>tag</goal></goals><configuration><image>${docker.image.prefix}/${project.name}:${project.version}-dev</image><newName>${docker.image.prefix}/${project.name}:${project.version}-RELEASE</newName></configuration></execution><execution><id>push-image</id><phase>deploy</phase><goals><goal>push</goal></goals><configuration><imageName>${docker.image.prefix}/${project.name}:${project.version}-RELEASE</imageName></configuration></execution></executions></plugin>

参数

docker-maven-plugin 插件还提供了很多很实用的配置:

参数说明默认值
truebuild 时强制覆盖 tag,配合 imageTags 使用false
truebuild 时,指定 –no-cache 不使用缓存false
truebuild 时,指定 –pull=true 每次都重新拉取基础镜像false
truebuild 完成后 push 镜像false
truebuild 完成后,push 指定 tag 的镜像,配合 imageTags 使用false
5push 镜像失败,重试次数5
10push 镜像失败,重试时间10s
truebuild 时,指定 –rm=true 即 build 完成后删除中间容器false
truebuild 时,使用最近的 git commit id 前7位作为tag,例如:image:b50b604 。前提是不配置 newNamefalse

参考

https://github.com/spotify/docker-maven-plugin

相关文章:

Maven插件之docker-maven-plugin

介绍 在持续集成过程中&#xff0c;项目工程一般使用 Maven 编译打包&#xff0c;然后生成镜像&#xff0c;通过镜像上线&#xff0c;能够大大提供上线效率&#xff0c;同时能够快速动态扩容&#xff0c;快速回滚&#xff0c;着实很方便。docker-maven-plugin 插件就是为了实现…...

成年后还能学习多少知识,由大脑的这个数量决定

撰文&#xff5c;Anne Trafton 编译&#xff5c;郑添惺 审校&#xff5c;clefable 麻省理工学院&#xff08;MIT&#xff09;的一些神经科学家发现&#xff0c;成年的大脑中含有数百万个“静默突触”&#xff08;silent synapses&#xff09;。它们是神经元之间未成熟的神经突…...

Flask 会话管理:从原理到实战,深度解析 session 机制

1、Flask中session 的实现原理&#xff1a;服务器与客户端的协作 HTTP 协议是无状态的——服务器无法区分两次请求是否来自同一用户。这意味着&#xff0c;用户登录后跳转到其他页面时&#xff0c;服务器会“忘记”用户身份。 为解决这一问题&#xff0c;Web 开发中引入了会话…...

MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)

错误描述 当您尝试连接MySQL数据库时&#xff0c;可能会遇到以下错误提示&#xff1a; 这个错误表明客户端无法连接到本地MySQL服务器。 可能的原因 MySQL服务未启动 MySQL配置问题 防火墙或安全软件阻止连接 端口被占用或未正确配置 网络连接问题 解决方案 方法一&am…...

【跨端框架检测】使用adb logcat检测Android APP使用的跨端框架方法总结

目录 Weex 跨端框架使用了uni-app的情况区分使用了uni-app还是Weex 判断使用了Xamarin判断使用了KMM框架判断使用了 ​​Ionic 框架判断使用了Cordova框架判断使用了Capacitor 框架使用了React Native框架使用了QT框架使用了Cocos框架使用了Electron 框架使用了flutter 框架使用…...

lua脚本实战—— Redis并发原子性陷阱

需求分析 对于内容类网站&#xff0c;比如用户浏览题目的答案&#xff0c;需要先登录才能追溯&#xff0c;那么可以统计用户访问频率来限制数据的爬取。 可采用分级反爬虫策略&#xff0c;先告警、再采取强制措施&#xff1a; 如果每分钟超过 10 道题&#xff0c;给管理员发…...

【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解

全局优化 mysql server参数 1. max_connections&#xff08;最大连接数&#xff09; 含义&#xff1a;MySQL 服务允许的最大并发连接数&#xff08;包括正在使用和空闲的连接&#xff09;。超过此限制时&#xff0c;新连接会被拒绝&#xff08;报错 Too many connections&am…...

CSS相关知识

1.清除浮动的方法 2.定位 静态定位相当于标准流 相对定位不脱离文档流&#xff0c;仍然占据原来的位置&#xff08;最频繁的作用是给绝对定位当爹&#xff09; 绝对定位脱离文档标准流&#xff0c;不再占有原来位置 3.BFC 1. 解决浮动元素导致的父容器高度塌陷 2. 阻止相邻元…...

AI扫描王APP:高效便捷的手机扫描工具,让生活更智能

AI扫描王APP是一款功能强大的手机扫描软件&#xff0c;专为追求高效、便捷的用户设计。它不仅支持文字提取和扫描翻译&#xff0c;还能进行测量&#xff0c;满足用户在不同场景下的需求。无论是办公、学习还是日常使用&#xff0c;AI扫描王都能帮助你快速完成任务&#xff0c;节…...

《仿盒马》app开发技术分享-- 原生地图展示(端云一体)

开发准备 上一节我们实现了获取当前用户的位置&#xff0c;并且成功的拿到了经纬度&#xff0c;这一节我们就要根据拿到的经纬度&#xff0c;结合我们其他的知识点来实现地图的展示。 功能分析 地图的展示&#xff0c;我们需要在管理中心先给我们对应的应用开启地图api功能&…...

Linux 操作文本文件列数据的常用命令

文章目录 Linux 操作文本文件列数据的常用命令基本列处理命令高级列处理列数据转换和排序列数据统计和分析 Linux 操作文本文件列数据的常用命令 Linux 提供了多种强大的命令来处理文本文件中的列数据&#xff0c;以下是一些最常用的命令和工具&#xff1a; 基本列处理命令 c…...

IP、子网掩码、默认网关、DNS

IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公网ip2.2 内网ip2.3 &#x1f310; 公网 IP 与内网 IP 的关系&#xff08;NAT&#xff09; 3. 子网掩码&#xff08;Subnet Mask&#xff09;4. 默认网…...

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

角度回归——八参数检测四边形Gliding Vertex

文章目录 一、介绍&#xff08;一&#xff09;五参数检测方法&#xff08; 基于角度&#xff09;&#xff08;二&#xff09;八参数检测方法&#xff08;point-based&#xff09;的边界 二、方案分析&#xff08;一&#xff09;问题定义&#xff08;二&#xff09;方案&#xf…...

JVM 高质量面试题

&#x1f4cc; 文章目录 一、JVM 内存结构与运行时模型1. JVM 内存结构分区及作用2. 栈帧结构及方法调用链维护3. 逃逸分析及其对对象分配策略的影响4. TLAB 的作用及提升对象创建效率的机制 二、垃圾回收器与 GC 调优1. CMS 与 G1 垃圾收集器的设计区别及适用场景2. Full GC 频…...

AI助力,制作视频裁剪软件

1. 视频裁剪软件套路多 最近再做一些测试&#xff0c;经常需要录屏什么的&#xff0c;有时候录制的时长视频&#xff0c;需要裁剪&#xff0c;比如去掉开头一些帧或者结尾的一些帧&#xff0c;就想保留关键点。但是网上下的一些软件&#xff0c;打开一用都是要付费的。所以想着…...

SQL注入基础

普通sql注入:后台能提供有价值的错误信息&#xff0c;显示在页面 手动注入 1. 寻找sql注入点 get注入 ?idxx url后加测试是否存在注入漏洞&#xff0c;报错则存在 post注入 把参数封装…...

使用 A2A Python SDK 实现 CurrencyAgent

谷歌官方的a2a-python SDK最近频繁的更新,我们的教程也需要跟着更新,这篇文章,我们通过 a2a-python sdk的 0.2.3 版本,实现一个简单的CurrencyAgent。 https://a2aprotocol.ai/blog/a2a-sdk-currency-agent-tutorial-zh 目录 源码准备详细过程 创建项目创建虚拟环境添加依…...

qt浏览文件支持惯性

#include <QApplication> #include <QListWidget> #include <QScroller> #include <QScrollerProperties>int main(int argc, char *argv[]) {QApplication app(argc, argv);// 创建列表控件并添加示例项QListWidget listWidget;for (int i 0; i <…...

Python类的力量:第六篇:设计模式——Python面向对象编程的“架构蓝图”

文章目录 前言&#xff1a;从“代码堆砌”到“模式复用”的思维跃迁 一、创建型模式&#xff1a;对象创建的“智能工厂”1. 单例模式&#xff08;Singleton&#xff09;&#xff1a;全局唯一的“资源管家”2. 工厂模式&#xff08;Factory&#xff09;&#xff1a;对象创建的“…...

[实战]用户系统-2-完善登录和校验以及VIP

这里写目录标题 完善登录和校验新建lib-auth创建配置引入配置和JWT完善登录基本登录单点登录多点登录校验和拦截编写守卫编写装饰器使用完善VIP修改mysql模型编写vip守卫代码进度完善登录和校验 之前我们模拟过用户的登录,本节将实现token的生成,校验,redis做黑名单。我们需…...

负载均衡笔记

并发数—同时服务的调用方的数量 吞吐量—单位时间内&#xff0c;能接受和返回的数据请求量 TPS。 Transaction事务 QPS。Query 请求/查询 优化点&#xff1a; 减少并发数—防止并非过高 低级—限流—可用的用户少了&#xff1f;&#xff01; 多开几个口—分流 DNS 解析域…...

印度语言指令驱动的无人机导航!UAV-VLN:端到端视觉语言导航助力无人机自主飞行

作者&#xff1a;Pranav Saxena, Nishant Raghuvanshi and Neena Goveas单位&#xff1a;比尔拉理工学院&#xff08;戈瓦校区&#xff09;论文标题&#xff1a;UAV-VLN: End-to-End Vision Language guided Navigation for UAVs论文链接&#xff1a;https://arxiv.org/pdf/250…...

mysql都有哪些锁?

MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分&#xff0c;根据锁的粒度、用途和特性&#xff0c;可以分为多种类型。以下是MySQL中常见的锁及其详细说明&#xff1a; 一、按锁的粒度划分 行级锁&#xff08;Row-level Locks&#xff09; 描述&#xff1a;…...

解锁未来AI:使用DACA模式和Agentic技术提高开发效率

学习Agentic AI:Dapr Agentic Cloud Ascent (DACA)设计模式的应用与演进 背景介绍 近年来,Agentic AI(代理型人工智能)的概念在学术界和产业界掀起了一阵热潮。Agentic AI指的是能够自主感知、决策和行动的智能体系统,它们不仅改变了我们与技术互动的方式,也为行业发展…...

HarmonyOS NEXT 使用 relationalStore 实现数据库操作

大家好&#xff0c;我是V哥。在 HarmonyOS NEXT 开发中&#xff0c;如何操作数据库&#xff0c;V 哥在测试中总结了以下学习代码&#xff0c;分享给你&#xff0c;如何想要系统学习鸿蒙开发&#xff0c;可以了解一下 V 哥最近刚刚上架出版的 《HarmonyOS 鸿蒙开发之路 卷2 从入…...

R语言学习--Day04--数据分析技巧

在清洗完数据&#xff0c;在对数据分析前&#xff0c;我们要懂得先梳理一下我们的逻辑&#xff0c;即数据是什么形式的&#xff0c;要进行哪种分析&#xff0c;有可能呈现什么特点&#xff0c;进而再想怎么处理数据去画图可以最大程度地凸显我们要的特点。 一般来讲&#xff0…...

SRS流媒体服务器之RTC播放环境搭建

环境概述 srs版本 commit 44f0c36b61bc7c3a1d51cb60be0ec184c840f09d Author: winlin <winlinvip.126.com> Date: Wed Aug 2 10:34:41 2023 0800Release v4.0-r5, 4.0 release5, v4.0.271, 145574 lines. rtc.conf # WebRTC streaming config for SRS. # see full.…...

Android 性能优化入门(三)—— ANR 问题分析

需要清楚 ANR 的概念、类型、如何产生以及如何定位分析。 1、概述 1.1 ANR 的概念 ANR&#xff08;Application Not Responding&#xff09;应用程序无响应。如果你应用程序在主线程被阻塞太长时间&#xff0c;就会出现 ANR&#xff0c;通常出现 ANR&#xff0c;系统会弹出一…...

用HTML5实现实时ASCII艺术摄像头

用HTML5实现实时ASCII艺术摄像头 项目简介 这是一个将摄像头画面实时转换为ASCII字符艺术的Web应用&#xff0c;基于HTML5和原生JavaScript实现。通过本项目可以学习到&#xff1a; 浏览器摄像头API的使用Canvas图像处理技术实时视频流处理复杂DOM操作性能优化技巧 功能亮点…...