Maven插件构建Docker镜像的实现步骤

网友投稿 959 2023-07-17

Maven插件构建Docker镜像的实现步骤

Maven插件构建Docker镜像的实现步骤

背景

微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上。单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网状分布的,有很多服务需要维护和管理,对它进行部署和维护的时候则比较复杂。

下面从Dev的角度来看一下Ops的工作。从Dev提交代码,到完成集成测试的一系列步骤如下:

首先是开发人员把程序代码更新后上传到Git,然后其他的事情都将由Jenkins自动完成。

然后Git在接收到用户更新的代码后,会把消息和任务传递给Jenkins,然后Jenkins会自动构建一个任务,-Maven相关的软件包。-完成后,就开始利用Maven Build新的项目包,然后重建Maven容器,构建新的Image并Push到docker私有库中。

最后删除正在运行的Docker容器,再基于新的镜像重新把Docker容器启动,自动完成集成测试。

整个过程都是自动的,这样就简化了原本复杂的集成工作,一天可以集成一次,甚至是多次。

本文主要关注的第二步,作为Dev使用Maven插件构建Docker镜像。

过程步骤

环境

笔者的电脑系统是MacOS,在进行下面的步骤之前,先具备一下条件:

Docker Registry

Maven(3.5.0)

JDK(1.8.0_131)

Docker for Mac (17.09.0-ce-mac35)

Maven 和JDK 就不用过多多了,必须具有的。Docker Registry是私有的hub,mac上装好docker之后,配置一下Docker Registry的地址,配置如下:

因为docker默认需要私服做https支持,我这边之前有个私服做了https支持,所以我这里就不需要配置了

pom 配置

pom文件中需要引入相应的插件。docker-maven-plugin有三款:spotify、fabric8io和bibryam。其中第一款最为流行,资料也多,所以毫不犹豫选择第一款。

插件有两种使用方式,一种是在直接在pom配置中指定baseImage和entryPoint。另一种适合于复杂的构建,使用dockerfile,只需要在配置中指定dockerfile的位置。前一种比较简单,此处略过,主要讲下第二种的配置

com.spotify

docker-maven-plugin

${maven.docker.version}

install

build

${docker.skip.build}

${docker.image.prefix}/${project.artifactId}

${project.version}

latest

true

Asia/Shanghai

ln -snf /usr/share/zoneinfo/$TZ /etc/localtime

echo $TZ > /etc/timezone

${project.basedir}

/

${project.build.directory}

${project.build.finalName}.jar

docker-registry

${maven.docker.version}、${docker.skip.build}、${docker.image.prefix}都是可配置的变量。${project.basedir}、${project.build.directory}、${project.build.finalName}、${project.version}分别对应项目根目录、构建目录、打包后生成的结果名称、项目版本号。

上面的pom插件配置,http://指定了dockerfile的位置和镜像的命名规则。并将docker的build目标,绑定在install这个phase上。

dockerfile

FROM java:8

COPY target/maven-docker-image-0.0.1-SNAPSHOT.jar /app.jar

EXPOSE 8080

ENTRYPOINT ["java","-jar" ,"/app.jar"]

setting.xml

在pom插件中,还有一个serverId的配置。这个配置是必要的,对于需要将image上传到私有hub上,在如上配置之后,只需要加上-DpushImage即可实现。serverId是与maven的配置文件setting.xml相对应,setting.xml中增加的配置:

docker-registry

用户名</username>

密码

邮箱

结果

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用fileupload组件实现文件上传功能
下一篇:SpringBoot导入mail依赖报错问题解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~