分享好友 最新动态首页 最新动态分类 切换频道
【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构建端口
最新文章
品牌网站设计与打造方案全攻略
摘要:本设计方案旨在打造品牌网站,以提升品牌形象和知名度,吸引更多潜在客户。设计将注重用户体验和视觉效果的融合,以简洁明了的界面展示品牌特色。方案将考虑网站的响应速度和兼容性,确保用户在不同设备上都能顺畅浏览。通过精心策划
更持久才更好用,年货节手机怎么选?7款长续航手机选购推荐。
很显然,在能耗表现上,骁龙8gen3就是当前最强的处理器,明显好于自家上一代的8gen2,联发科的天玑9300因为现在长续航的手机选择不多,所以暂时还看不出端倪。一加12年货节期间最高免息分期24期,并且有加赠Enco Air 2i 活动。同样的229g,
【阿里翁●神马商城】~FDA新品~Stabilize heart 安心片
高血压的主要症状头晕、头痛 头晕是高血压最多见的症状,有些是一次性的,在突然站起来或蹲下时出现;有些是持续性的。头痛也是高血压的常见症状,多为搏动性的胀痛或持续性的钝痛,严重者甚至有炸裂性的剧痛。常在早晨睡醒时发生,起床下
零售数据分析之操作篇11:销售占比分析
各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维+数据分析,通过数据讲故事。上期内容和作业上一讲讲了排名与TOP的场景,排名是以排序为基础,从1开始标识其排名的序号;而TOP则是以排序为基础,仅显示N行或N%行记录。上一
试试长亭科技吧,阿里云子公司
❶让你和+2老板汇报nbsp;如果是好事,就是给你露脸的机会,展示他带出来的人能力还不错;如果是坏事,就是让你主动去背锅,展示他不知情且还有管理空间nbsp;知彼解己,抓住每次和+2或大老板们汇报的机会,提前做充分准备nbsp;❷让你去做统
独立站卖家如何布局Google SEO?
做,大部分商家会选择见效快的付费,随着平台CPM节节攀升,群里好多人反馈广告花费更高了,广告效果却变差了。跑广告受伤的人怎么办?我们怎么能放过免费流量呢,FunnPin独立站学院特特别课堂开始了:独立站卖家应该如何布局Google SEO?什
高级设计师如何做搜索功能?来看这篇超全面的总结!
宜信大数据创新中心-UI 设计师李婷婷 :文章带大家一起了解如何通过设计提升搜索功能的视觉层次、情感体验、搜索效率等。一、搜索功能的作用搜索是我们经常使用的功能,当我们面对复杂的信息时,想找到目标信息,就会寻找搜索功能的位置,
网站优化是什么?介绍网站优化方式与好处
网站优化的术语是SEO优化,它是利用搜索引擎的搜索规则来提高当前网站在相关搜索引擎中的自然排名。接下来我们一起看看网站优化的好处和优化方法吧。一、网站优化的好处1、发挥企业产品和品牌推广作用经过SEO优化后,企业网站可以获得更高
马凯:建设高素质专业化高校党务干部队伍的思考
摘要:高校党务工作队伍是高校党建工作的中坚力量,建设高素质专业化高校党务干部队伍应立足“优”字抓选配、突出“学”字抓培育、体现“严”字抓管理、坚持“活”字抓交流、把握“研”字抓规律,全面加强高校党务干部队伍建设。关键词:高
打造在线影视帝国,电影网站搭建实战全攻略
从零开始,本攻略将带你全面构建电影网站。涵盖网站规划、平台选择、内容管理、用户体验优化等关键步骤,助你打造一个专业的在线影视帝国。跟随指南,轻松搭建并运营你的电影网站。初期筹备网站构建网站管理在互联网的浪潮中,电影网站已成
相关文章
推荐文章
发表评论
0评