docker-maven-plugin初探

spotify-docker-maven-plugin远程发布镜像 docker maven插件有几种,但这里记录是com.spotify下的插件; spotify下面有二种插件docker-maven-plugin和dockerfile-maven-plugin。 他们二者有什么区别呢? dockerfile-maven-plugin是docker-maven-plugin孪生弟弟; 插件docker-maven-plugin可以不用(docker(Docke... 阅读详情

背景

最近想搞持续集成测试,初步构想是使用git、jekins、maven、docker作为持续集成的基础组件,当然也是最常用的基础组件。 
初步是想将java的测试用例塞到docker容器中进行测试,测试环境部署只一次就好,镜像推送到仓库,随测随拉,直接使用docker命令运行,好处是环境一致,不需要重新部署测试代码所依附的环境;坏处是docker,docker,docker,也就是想运行测试用例必备的基础环境docker。

junit的命令行执行

我们最常见的执行测试用例多数是通过eclipse的run as,或者是mvn test执行测试用例。如果将测试用例塞到容器内,要么将mvn装到容器内,要么在物理机构建,并将构建后的环境也就是jar包塞到容器内使用java执行。 
衡量了下,还是决定在物理机进行构建,将构建结果塞到容器内. 
1. 重复构建mvn环境浪费时间; 
2. 将mvn塞到容器内浪费资源; 
3. blablabla,反正就是不爽

鉴于本人学艺不精,这里转载一篇对于junitcore使用的文章:

命令行执行使用java -cp *.jar org.junit.runner.JUnitCore classname可参考该篇文章了解及执行。

执行示例

使用junit简单的输出语句,没有功能,只是作为示例演示:

public class startTest {

    @Before
    public void setup(){
        System.out.println("this is setup...");
    }

    @After
    public void teardown(){
        System.out.println("this is teardown...");
    }

    @Test
    public void test1(){
        System.out.println("this is test1...");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

命令行之行junit:

java -cp $CLASS_PATH:target/test-classes org.junit.runner.JUnitCore $CLASS_NAME 
  • 1

遇到的问题及解决办法

由于对java执行junit测试用例实在不是很熟,mvn打完包后,执行

java -cp $CLASS_PATH org.junit.runner.JUnitCore $CLASS_NAME
  • 1

总是找不到测试类(本人技术不熟,喷子勿喷^o^),原因是由于jar包内默认查询的是src/main下的文件,而测试用例大都在src/test下

mv src/test src/main
mvn clean package -DskipTests=true
java -cp $CLASS_PATH org.junit.runner.JUnitCore $CLASS_NAME
bingo
  • 1
  • 2
  • 3
  • 4

或者指定classpath,指定去target/test-classes目录下查找测试类

java -cp $CLASS_PATH:target/test-classes org.junit.runner.JUnitCore $CLASS_NAME
  • 1

进入主题

该插件有两种使用方式: 
1. 不使用dockerfile 
2. 使用dockerfile

不使用dockerfile

顾名思义就是不依赖于dockerfile构建镜像,即通过标签来定义镜像构建过程。

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <imageName>registry.test.com/example</imageName>
    <baseImage>registry.test.com/base_image</baseImage>
    <entryPoint>["sh", "start.sh"]</entryPoint>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>**/*</include>
      </resource>
    </resources>
  </configuration>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

其中:

imageName:即将构建的镜像名 
baseImage: 构建镜像时需要的基础镜像,类似于Dockerfile的From 
entryPoint: 容器启动时执行的命令 
resources:拷贝一些额外的文件到指定路径下,比如${project.build.finalName}.jar文件

一些maven的内置变量

${basedir} 项目根目录 
${project.build.directory} 构建目录,默认为target 
${project.build.outputDirectory} 构建过程输出目录,默认为target/classes,target/test-classes 
${project.build.finalName} 打包后生成的结果名称,默认为${project.artifactId}-${project.version} 
\${project.packaging} 打包类型,默认为jar

maven一些标签

targetPath:指定build资源到哪个目的目录,默认是base directory 
directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下。 
includes:指定包含文件的patterns,符合样式并且在directory目录下的文件将会是包含进project的资源文件 
excludes:指定不包含在内的patterns,如果includes与excludes有冲突,那么excludes胜利,那些符合冲突样式的文件还是不会包含进来的

使用dockerfile

依赖于Dockerfile构建镜像,需指定dockerDirectory 来查找Dockerfile所在文件目录,指定dockerDirectory后,baseImage, maintainer, cmd和entryPoint等标签均失效。dockerDirectory目录下的所有内容默认会被复制到${project.build.directory}/docker目录下。

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>0.4.13</version>
  <configuration>
    <imageName>registry.test.com/example</imageName>
    <dockerDirectory>${project.basedir}/</dockerDirectory>
    <resources>
      <resource>
        <targetPath>/</targetPath>
        <directory>${project.build.directory}</directory>
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>
</plugin>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

我的根目录结构为:

-rw-r--r-- 1 ** **  437 Sep 21 10:38 Dockerfile
drwxr-xr-x 2 ** ** 4096 Sep 20 13:59 lib
drwxr-xr-x 3 ** ** 4096 Sep 20 11:18 logs
-rwxrwxrwx 1 ** ** 3015 Sep 20 18:40 pom.xml
-rwxr-xr-x 1 ** ** 3102 Sep 20 18:54 pom.xml.undocker
drwxrwxrwx 3 ** ** 4096 Sep 20 11:18 src
-rw-r--r-- 1 ** ** 1028 Sep 20 10:27 start.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

我的Dockerfile指定在根目录下,当执行 mvn clean package docker:build后会生成一target文件,查看target目录后默认生成docker文件夹,继续查看docker文件夹时可见,根目录的所有内容都被copy到该文件夹下,在进行docker build的过程中也是在target/docker目录下根据Dockerfile执行。

Dockerfile文件内容如下,安装了jdk,添加测试代码所需的一些库:

From registry.test.com/base_image:centos6.6

ADD target/test-classes /data1/target/test-classes
ADD target/dockermaven/lib /data1/target/dockermaven/lib
ADD start.sh /data1/
ADD lib/jdk-1.8.0_77-2.el6.x86_64.rpm /jdk-1.8.0_77-2.el6.x86_64.rpm
RUN rpm -ivh /jdk-1.8.0_77-2.el6.x86_64.rpm
ENV JAVA_HOME /usr/local/jdk1.8.0_77
ENV PATH $PATH:$JAVA_HOME/bin
RUN chmod +x /data1/start.sh
WORKDIR /data1
CMD sh start.sh
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

构建命令

# maven打包并构建镜像
mvn clean package -DskipTests=true docker:build
# maven打包构建镜像并push到仓库
mvn clean package docker:build -DpushImage
# maven打包构建镜像,将指定tag的镜像push到仓库,该命令需使用
# <imageTags><imageTag>...</imageTag></imageTags>标签
mvn clean package docker:build -DpushImageTag

<plugin>
  <configuration>
    ...
    <imageTags>
       <imageTag>${project.version}</imageTag>
       <imageTag>latest</imageTag>
    </imageTags>
  </configuration>
</plugin>

# 关于tags配置也可在命令行直接设置
mvn ... docker:build -DpushImageTags -DdockerImageTag=latest -DdockerImageTag=another-tag
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

参考自: 
http://blog.youkuaiyun.com/neven7/article/details/46675845 
https://github.com/spotify/docker-maven-plugin 
https://www.zybuluo.com/babydragon/note/352069 
http://dockone.io/article/582 
http://www.cnblogs.com/puroc/p/5799228.html

dockerbuild-maven-plugin:使用 docker 容器构建 java 项目的 Maven 插件 Dockerbuild Maven 插件 使用 docker 容器构建 java 项目的 Maven 插件 立即下载

相关推荐

FastDDS之共享内存

transport层负责为DDS用户数据收发和服务发现提供通信。包含UDP,TCP,SHM。

u010378559的博客 3089

持续集成测试(1) -- docker-maven-plugin初探

持续集成测试(1) – docker-maven-plugin初探背景最近想搞持续集成测试,初步构想是使用git、jekins、maven、docker作为持续集成的基础组件,当然也是最常用的基础组件。 初步是想将java的测试用例塞到docker容器中进行测试,测试环境部署只一次就好,镜像推送到仓库,随测随拉,直接使用docker命令运行,好处是环境一致,不需要重新部署测试代码所依附的环境;坏处

kansuke_zola的博客 1万+

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9202

Maven利用maven-antrun-plugin插件拷贝文件 copy

今天在做Docke镜像的时候想要把编译出来 的Jar包自动复制到指定目录下,网络找到了maven-antrun-plugin 这个插件,在这个过程中遇到了几个问题,现记录下来,记录时候 2021-12-13。 完整代码如下: <!--docker需要的jar的复制操作--> <plugin> <artifactId>maven-antrun-plugin</artifactId> .

面向未来 8728

RISC-V内核移植实战:从零开始手把手实现RT-Thread上下文切换(附GD32VF103代码解析)

本文详细解析了在RISC-V架构上移植RT-Thread实时操作系统的核心步骤,重点聚焦于上下文切换机制的实现。通过对比ARM Cortex-M与RISC-V在中断处理和寄存器管理上的关键差异,并以GD32VF103开发板为例,手把手指导开发者完成libcpu抽象层适配、线程栈初始化以及三种上下文切换方式的代码编写与调试,为嵌入式开发者从ARM转向RISC-V平台提供了实战指南。

fern8的博客 740

科研党福音:如何用Zotero+Paper Agent打造你的AI论文速递系统(附详细配置教程)

本文为科研工作者提供了一套利用Zotero和开源工具Paper Agent构建自动化AI论文速递系统的详细教程。该系统能基于用户在Zotero中的文献库智能学习研究兴趣,每日自动从arXiv等平台筛选、下载并深度解读最相关的前沿论文,生成个性化日报,实现从被动接收到主动精准获取的知识工作流重塑。

kite3的博客 517

Maven 插件之 docker-maven-plugin 的使用

在我们持续集成过程中,项目工程一般使用 Maven 编译打包,然后生成镜像,通过镜像上线,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便。docker-maven-plugin 插件就是为了帮助我们在Maven工程中,通过简单的配置,自动生成镜像并推送到仓库中。我们可以绑定 Docker 命令到 Maven 各个阶段,我们可以把 Docker 分为 build、tag、push,然后分别绑定 Maven 的 package、deploy 阶段,此时,我们只需要执行。

m0_67400973的博客 1万+

codemirror6 制作markdown编辑器(源码模式)

总体上感觉能用,但是不怎么友好,官方文档有点散乱,而且关键字高亮功能是独立出去的,去官方文档找半天,也没找到怎么改。EditorView.theme可以往EditorView模块中修改CSS的样式,从而影响编辑器的样式展示。"### 测试\n\n```javascript\nlet x = 'y'\n```"这个插件中的markdown语法的高亮样式。//这里指定markdown中代码块使用的解析扩展。开头的class样式,并且还需要在选择器前面添加。//markdown语言解析扩展。

qq_43203949的博客 1784

Torque3D图形渲染系统详解:OpenGL与D3D11双引擎支持的终极指南

Torque3D作为一款强大的开源游戏引擎,其图形渲染系统采用了创新的双引擎架构,同时支持OpenGL和Direct3D 11两大主流图形API。这种设计让开发者能够在Windows、Linux、macOS等多个平台上创建高性能的3D游戏和应用程序。无论您是游戏开发新手还是资深开发者,了解Torque3D的图形渲染架构都能帮助您更好地利用这个强大的工具。 ## 🎮 为什么选择双渲染引擎架构?

gitblog_00473的博客 1663

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

人像抠图 + OpenGL ES 还能这样玩?没想到吧(附带源码)

OpenGL ES 利用抠图算法实现人像留色。

字节流动 3万+

Maven插件之docker-maven-plugin

本文介绍了使用docker-maven-plugin插件实现Maven工程自动化构建Docker镜像的方法

demon7552003的小本本 2060

课程1:认识Asp.net Core Web API

本文是《.Net Core从零学习搭建权限管理系统》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。专栏适用于人群:Web后端开发人员Web API是一个很广泛的概念,Asp.net Core Web API是.NET框架用于创建RESTful风格的项目、用于轻松构建可供多个客户端访问的HTTP服务。1、支持RestFul风格编程;

成长的足迹 1256

Maven插件之spotify的docker-maven-plugin和dockerfile-maven-plugin,docker部署

docker-maven-plugin能有效帮助我们在面对数量众多的微服务项目时,自动化构建和容器化部署,提高部署效率。 docker-maven-plugin文档 1. 修改docker配置 修改宿主机的docker配置,让其可以远程访问 vi /lib/systemd/system/docker.service # 在ExecStart=后添加配置 ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock 修改后配置如下: ExecStart=

Interesting 4907

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

maven插件:dockerfile-maven-plugin和docker-maven-plugin

适合已有Dockerfile且希望保持其独立性,同时需要在Maven构建时自动构建和推送镜像的项目。它强调与现有Docker工作流的无缝对接,配置相对简洁。则更适合需要在Maven配置内部直接定义镜像构建过程,追求高度集成和灵活控制的场景。虽然可能带来更复杂的Maven配置,但它提供了更深入的Docker生命周期管理功能。总的来说,提供了一种不依赖Dockerfile的构建方式,而则更加严格地遵循 Docker 的标准构建流程,要求必须使用Dockerfile。

一个写了10年bug的程序员日常笔记。 3320

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Maven 插件 docker-maven-plugin 的使用配置

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33825683的博客 5727

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

Maven中的docker-maven-plugin、dockerfile-maven-plugin插件

dockerfile-maven-plugin是一个用于构建和推送Docker镜像的Maven插件。

北辰 2815

docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云

目录 docker-maven-plugin 基本介绍 使用手册 Maven Goals命令 Maven命令执行顺序 Skip Docker Goals Bound to Maven Phases(跳过) Configuration 使用示例 注意事项(准备工作) Maven多模块工程 Pom配置-父工程 配置信息 Pom配置-子工程 编写Dockerfile文件制作镜像 前提: 推送镜像-Docker Registry Docker Registry 2.0搭建...

琦彦 1万+

无缝集成Docker与Maven:docker-maven-plugin实战指南

适用场景:针对使用 docker-maven-plugin 实现镜像自动化构建与推送的教程类内容,突出工具集成与实操。

2566

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

该插件需要 Java 7 或更高版本以及 Apache Maven 3 或更高版本(dockerfile-maven-plugin = 3,对于其他情况,Maven >= 3.5.2)。. 该插件围绕生成 Dockerfile、将项目目录复制到“暂存”目录以用作 Docker 构建上下文等的行为,最终导致我们的用户产生很多不必要的困惑,这些困惑源于引入额外的抽象和需求用于在 Docker 提供的基础上进行配置。跳过绑定到 Maven 阶段的 Docker 目标。

一个写了10年bug的程序员日常笔记。 2702

Maven docker-maven-plugin 的使用

docker-maven-plugin官网推荐在新项目中使用dockerfile-maven来构建镜像。 docker-maven-plugin的Github地址:https://github.com/spotify/docker-maven-plugin dockerfile-maven的Github地址:https://github.com/spotify/dockerfile-maven...

云原生,DevOps,Kubernetes 1191

maven生命周期介绍;maven-dependency-plugin讲解;maven-resources-plugin讲解;docker-maven-plugin简单讲解

Maven Assembly Plugin 是一个强大的Maven插件,用于创建项目的分发包,它可以将项目的编译输出、依赖、资源以及其他文件组织成一个可分发的归档文件,如ZIP、TAR、JAR、WAR等。知识总是在总结中发酵的,去年在公司做过容器化相关的东西,涉及到制作发布包等内容,对maven有了进一步的理解,但是一直没有时间整理,最近找些时间总结一下,希望对大家也有帮助吧。maven-dependency-plugin是Maven中一个非常强大的插件,用于处理项目依赖相关的任务。翠花,辛苦捡桌子了!

洛雪 1050

使用docker-maven-plugin构建Spring boot镜像

docker-maven-plugin使用 使用私有镜像中心 为了将镜像推送到私有的镜像注册中心,docker需要在镜像tag之前用注册中心的地址作为前缀。比如需要推送my-image到registry.example.com,那么这个镜像需要命名为registry.example.com/my-image 最简单的方法就是在中配置: &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;build&amp;amp;amp;amp;amp;amp;amp

wflovejava的博客 2186
上一篇: 使用docker-maven-plugin插件实现Docker构建并提交到私有仓库
下一篇: 在CentOS启动时自动加载内核模块
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值