分享好友 最新动态首页 最新动态分类 切换频道
【Maven实战技巧】「Docker实战系列」使用Maven插件构建Docker镜像的方法
2024-12-27 12:44

本文介绍了使用Maven插件构建Docker镜像的方法,分享给大家,具体如下

工具

工欲善其事,必先利其器。笔者经过调研,有以下几款Docker的Maven插件进入笔者视野。

插件名称+官方地址

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

  • docker-maven-plugin https://github.com/fabric8io/docker-maven-plugin

  • docker-maven-plugin https://github.com/bibryam/docker-maven-plugin

修改宿主机配置(docker可以远程访问

  • 修改宿主机的docker配置,让其支持远程访问。
 

开启docker远程API,修改docker配置文件 docker.service进入编辑模式后。

ExecStart=后添加配置-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

保存后退出,重新加载配置文件#systemctl daemon-reload ,启动docker #systemctl start docker 。

  • 刷新配置,重新服务
 

配置 DOCKER_HOST

docker-maven-plugin 插件默认连接本地 Docker 地址为:localhost:2375,所以我们需要先设置下环境变量。

 

注意:如果没有设置 DOCKER_HOST 环境变量,可以命令行显示指定 DOCKER_HOST 来执行,如我本机指定 DOCKER_HOST:DOCKER_HOST=tcp://:2375

例如
  • ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ,这里就写4个0,你可别改成自己的ip哦

  • 输入 显示docker正在监听2375端口,输入#curl 127.0.0.1:2375/info 显示一大堆信息,证明远程api就弄好了

  • 在windows系统环境变量中新建DOCKER_HOST,值为tcp://10.100.74.220:2375(你改成你自己的docker服务器ip地址

使用插件构建Docker镜像

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

添加插件

在pom.xml中添加下面这段

 

构建镜像

构建镜像可以使用一下两种方式,第一种是将构建信息指定到 POM 中,第二种是使用已存在的 Dockerfile 构建。(支持将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息配置在 POM 中,不需要使用 Dockerfile 配置。)

  • 第一种方式,支持将 FROM, ENTRYPOINT, CMD, MAINTAINER 以及 ADD 信息配置在 POM 中,不需要使用 Dockerfile 配置

  • 第二种方式,如果使用 VOLUME 或其他 Dockerfile 中的命令的时候,需要创建一个 Dockerfile,并在 POM 中配置 dockerDirectory 来指定路径即可。(创建一个 Dockerfile,并在 POM 中配置 dockerDirectory 来指定路径即可)

添加docker-maven-plugin
 
  • {dockerhub名称/imageName}

    • dockerhub名称:对应DockerHub用户名,一定要是符合正则[a-z0-9-_.]的,否则构建不会成功

    • imageName:对应 DockerHub 仓库名,一定要是符合正则[a-z0-9-_.]的,否则构建不会成功

    • 可以直接指定{project.artifactId}

  • {imageTag}:镜像标签,相当于标签或者版本,latest。

  • {baseImage}: 指定基础镜像,等同 FROM 指令,例如:java,当然可以不用,直接在dockerfile文件中生成。

  • {endpoint}:// 等同于 ENTRYPOINT 指令,例如: [“java”,“-jar”,“app.jar”]

这里是复制 jar 包到 docker 容器指定目录配置,也可以写到 Dockerfile中

  • {project.build.directory}:指定要复制的根目录,${project.build.directory} 表示 target 目录。

  • {project.build.finalName}:指定要复制的文件,${project.build.finalName}.jar 指打包后的 jar 文件。

  • resources.resource.targetPath:将打包后的资源文件复制到该目录

  • resources.resource.directory:需要复制的文件所在目录,maven打包的应用jar包保存在target目录下面

  • resources.resource.include:需要复制的文件,打包好的应用jar包。

读取 Dockerfile 文件就不必指定 baseImage 和 entrypoint

  • 指定要读取的Dockerfile文件
 
创建Dockerfile

srcmaindocker

内容如下
 
执行以下命令构建 Docker 镜像

mvn clean package docker:build

 
 

执行 docker images 查看刚才构建的镜像

执行命令
  • mvn clean package docker:build:只执行 build 操作
  • mvn clean package docker:build -DpushImage 执行 build 完成后 push 镜像
  • mvn clean package docker:build -DpushImageTag 执行 build 并 push 指定 tag 的镜像

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

命令行指定如下

mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2,POM 文件中指定配置如下

 

绑定Docker 命令到 Maven 各个阶段

  • 可以绑定 Docker 命令到 Maven 各个阶段,我们可以把 Docker 分为 build、tag、push,然后分别绑定 Maven 的 package、deploy 阶段。

  • 只需要执行mvn deploy就可以完成整个 build、tag、push操作了,当我们执行mvn build就只完成 build、tag 操作

  • 除此此外,当我们想跳过某些步骤或者只执行某个步骤时,不需要修改 POM 文件,只需要指定跳过 docker 某个步骤即可。比如当我们工程已经配置好了自动化模板了,但是这次我们只需要打镜像到本地自测。

  • 不想执行 push 阶段,那么此时执行要指定参数-DskipDockerPush就可跳过 push 操作了。

以上示例,当我们执行mvn package时,执行 build、tag 操作,当执行mvn deploy时,执行build、tag、push 操作。如果我们想跳过 docker 某个过程时,只需要

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

例如:我们想执行 package 时,跳过 tag 过程,那么就需要mvn package -DskipDockerTag。

 
 

安全认证配置

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

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

 

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

 

使用私有Docker仓库地址

实际工作环境中,我们需要 push 镜像到我们私有 Docker 仓库中,使用d ocker-maven-plugin 插件我们也是很容易实现,有几种方式实现

修改 POM 文件 imageName 操作
 

以以上的格式进行输出即可。

修改 POM 文件中 newName 操作
 
重新启动Docker服务
 
开启防火墙的Docker构建端口
最新文章
网页转二维码:简单实用的在线工具
在如今的信息时代,二维码已经成为人们生活中不可或缺的一部分。二维码可以承载大量的信息,并且可以通过扫描进行快速的读取。在网页设计和推广中,将网页转为二维码是一项非常重要的工作。本文将介绍一种简单实用的在线工具,帮助用户将网
水排的汉语大词典
水排的汉语大词典是:古代一种利用水力推动革囊鼓风的冶铁装置。《三国志·魏志·韩暨传》:“旧时冶,作马排,每一熟石用马百匹;更作人排,又费功力;暨乃因长流为水排,计其利益,三倍于前。”明徐光启《农政全书》卷十八:“水排,韦囊
PyTorch深度学习模型训练加速指南2021
点击上方“AI公园”,关注公众号,选择加“星标“或“置顶” 作者:LORENZ KUHN 编译:ronghuaiyang导读简要介绍在PyTorch中加速深度学习模型训练的一些最小改动、影响最大的方法。我既喜欢效率又喜欢ML,所
网站怎么优化电池推荐
优化您的网站以推荐电池产品涉及几个方面,包括SEO(搜索引擎优化)、用户体验和内容策略。以下是一些关键步骤: 1. 关键词和SEO优化- 关键词研究: 使用工具如Google Keyword Planner、Ahrefs或SEMrush来识别与电池相关的高搜索量关键词,
虾皮店铺转让多少钱?如何转让?
现在很多卖家选择在跨境平台虾皮上注册开店,但是由于平台上的店铺是非常激烈的,很多卖家无法继续将店铺经营下去,就会想要将店铺进行转让,那么虾皮店铺转让是多少钱了?shopee店铺转让价格并不是一定的,主要还是看店铺的运营情况。一般
超高清美女写真,这款AI工具教你一键生成心仪形象!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字时代,许多人希望通过高科技手段来实现艺术创作,而AI的崛起让这一切变得轻而易举
科技智能重塑外汇体验,最新动态与未来展望
摘要:外汇市场最新动态显示,科技引领未来发展趋势,智能产品正在重塑外汇交易体验。随着科技的不断进步,外汇交易逐渐实现智能化,提供更加便捷、高效的交易方式。智能产品的应用,使得外汇交易更加智能化、个性化,满足不同交易者的需求
ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法,先分组,然后在组内排名,分组计算,主表与附表一对多取唯一等
今天在使用多字段去重时,由于某些字段有多种可能性,只需根据部分字段进行去重,在网上看到了rownumber() over(partition by col1 order by col2)去重的方法,很不错,在此记录分享下:  row_number() OVER ( PARTITION BY COL1 ORDER B
讲座回顾 | 探秘以“假”乱真的AIGC图像与视频生成
图|广外国际学院随着人工智能深入高等教育,海内外优质高等教育资源也在积极响应科技发展的步伐,愈发重视人工智能在现代商业中的关键作用。本次AI系列讲座是广外国际学院响应高等教育高质量发展的一次全新举措,从AI的起源和发展史,到AI
《重返80年代之我靠抓螃蟹发家》短剧在线观看,致姗姗来迟的你(电视剧版)——时光深处的温暖相遇(集萃)短剧在线观看,致姗姗来迟的你百科短剧在线观看
《重返80年代之我靠抓螃蟹发家》是一部在线观看的短剧,讲述了一段关于时光深处的温暖相遇的故事。这部短剧展现了主人公通过抓螃蟹发家致富的历程,同时也展现了姗姗来迟的温暖相遇。观众可以在线观看这部短剧,感受其中的情感与温馨。久别
相关文章
推荐文章
发表评论
0评