分享好友 最新动态首页 最新动态分类 切换频道
【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构建端口
最新文章
蓝牙串口spp软件
蓝牙串口spp软件,一般又称SPP蓝牙串口。一款为蓝牙相关开发人员量身定制的蓝牙串口调试工具。1. 支持循环搜索设置,自动确认UUID,实时显示搜索到的设备信息(信号强度、MAC地址、配对等)。2. 支持根据设备名称、MAC地址、信息强度、是否
黄石百度爱采购托管代运营
解答:百度爱采购的优点有哪些?对中小企推广有什么优势?百度爱采购是百度集团旗下的 B2B 竖直搜索模块,致力于协助客户更切实解决企业发展趋势难点。服务平台靠着百度强劲的搜索技术性,服务项目大量客户,并运用AI技术性,结合要求案件
SDCMS红色系网络公司网站 v2.7.1.9
SDCMS红色系网络公司网站是基于SDCMS四合一企业网站管理系统开发的模板,适合企业站,带手机版。SDCMS四网合一企业网站管理系统是一个以PHP+MySQL/Sqlite进行开发的四网合一网站源码。四网合一企业网站管理系统支持在线升级(支持跨版本)
搞笑配音:恐龙大战怪兽之王,看完精彩又搞笑!
{{if !data.isVip && data.isActText}}{{else if !data.isVip && !data.isActText}}{{else}}{{if !data.isNormalVip}}{{if data.expiredVip && data.isActText}}{{else if data.expiredVip && !data.isActText}}{{else}}{{/if}}{{else if d
盘点一款微信小程序辅助器免费
您好:微信小程序辅助器免费这款游戏可以开挂的,确实是有卦的,咨询加V:X【95559344】微信小程序辅助器免费2025已更新(2025已更新)微信小程序辅助器免费工具全国可开地区:北京市(东城区、西城区、崇文区、宣武区、朝阳区、丰台区、石
百会在线文档,重塑办公文档管理的未来新篇章
百会在线文档是一款重塑办公文档管理的创新产品。它通过先进的技术和智能管理,为用户提供便捷、高效的文档处理体验。百会在线文档致力于优化办公流程,实现文档管理的智能化和高效化,助力企业和个人轻松应对日益增长的文档处理需求。百会
抖音付费推广有几种方式?有什么效果?
在抖音这个庞大的短视频平台上,付费推广成为了许多品牌和创作者快速提升曝光和影响力的有效手段。本文将详细介绍抖音付费推广的几种方式及其效果。一、抖音付费推广有几种方式?1.Dou+推广Dou+是抖音官方推出的付费推广工具,可以让视频获
招聘海外广告优化师
招海外广告投放(赤子城广州分)12-20K1、负责海外社交产品在Facebook/Google/Tiktok等及网盟等广告渠道的账户搭建,用户定位,数据监控及分析,优化广告数据,对广告效果负责2、制定海外社交产品项目整体的投放策略,负责素材方向及预算把控
哥普顿热水器快速售后24小时人工400-(问题解决) - 生活 - 百科知识-蓝心网
哥普顿热水器售后24小时维修服务热线:400-658-8618。哥普顿热水器全市各区售后服务点热线号码。☎:400-658-8618哥普顿热水器售后服务,秉承“诚信为本、客户至上”的服务态度和“以客户为中心”的服务指导思想,不仅真诚地为用户提供先进
爬虫大全:从零开始学习爬虫的基础知识,小白也能学
爬虫的实现原理其实很简单,就是模拟浏览器发送请求、获取响应、解析HTML代码、保存数据的过程。具体来说,可以分为以下几个步骤:我们在浏览器里输入网址访问网页时,其实就是在向服务器发送一条请求。在爬虫中&#
相关文章
推荐文章
发表评论
0评