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

背景

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

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

  1. 首先是开发人员把程序代码更新后上传到Git,然后其他的事情都将由Jenkins自动完成。
  2. 然后Git在接收到用户更新的代码后,会把消息和任务传递给Jenkins,然后Jenkins会自动构建一个任务,下载Maven相关的软件包。下载完成后,就开始利用Maven Build新的项目包,然后重建Maven容器,构建新的Image并Push到Docker私有库中。
  3. 最后删除正在运行的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的位置。前一种比较简单,此处略过,主要讲下第二种的配置

<plugin>
       <groupId>com.spotify</groupId>
       <artifactId>docker-maven-plugin</artifactId>
       <version>${maven.docker.version}</version>
       <!--插件绑定到phase-->
       <executions>
         <execution>
           <phase>install</phase>
           <goals>
             <goal>build</goal>
           </goals>
         </execution>
       </executions>
       <configuration>
       <!--配置变量,包括是否build、imageName、imageTag,非常灵活-->
         <skipDocker>${docker.skip.build}</skipDocker>
         <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
         <!--最后镜像产生了两个tag,版本和和最新的-->
         <imageTags>
           <imageTag>${project.version}</imageTag>
           <imageTag>latest</imageTag>
         </imageTags>
         <forceTags>true</forceTags>
         <env>
           <TZ>Asia/Shanghai</TZ>
         </env>
         <!--时区配置-->
         <runs>
           <run>ln -snf /usr/share/zoneinfo/$TZ /etc/localtime</run>
           <run>echo $TZ > /etc/timezone</run>
         </runs>
         <dockerDirectory>${project.basedir}</dockerDirectory>
         <resources>
           <resource>
             <targetPath>/</targetPath>
             <directory>${project.build.directory}</directory>
             <include>${project.build.finalName}.jar</include>
           </resource>
         </resources>
         <!--push到私有的hub-->
         <serverId>docker-registry</serverId>
       </configuration>

</plugin>

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

上面的pom插件配置,指定了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中增加的配置:

<server>
 <id>docker-registry</id>
 <username>用户名</username>
 <password>密码</password>
 <configuration>
  <email>邮箱</email>
 </configuration>
</server>

结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Maven Docker镜像使用技巧

    本文介绍了Maven Docker镜像使用技巧,分享给大家,具体如下: Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能. Docker提供了官方的Maven镜像可以用于管理和构建Java应用.与直接安装使用Maven工具相比,使用Docker镜像具有更好的可移植性,可以方便地进行版本切换,非常适合在持续集成过程中使用. 关于Maven官方镜像的用法可以参考使用文档 使用阿里云加速 Maven官方仓库在国内网络下的下载速度实在是让人欲哭无泪,利用阿里云的Ma

  • Docker使用 Maven 插件构建镜像的方法

    通过 Maven 的 Docker 插件可以构建 Docker 镜像 快速入门 在 pom.xml 中添加 Docker 插件 <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>

  • Docker构建Maven+Tomcat基础镜像的实现

    前言 在 Java 编程中,大多数应用都是是基于 Maven 构建的,而交付的结果大多是采用的 Tomcat 的 war 包形式,所以,构建一个基于 Maven 和 Tomcat 的基础镜像很有必要,不仅能帮助我们提升平时自主实验研究分析的效率,还可以在一定程度能减少运维减少编写 Dockerfile 的复杂度,提升整体项目交付效率. 1.创建编译目录 mkdir -p build_docker cd build_docker vim Dockerfile 2.编写 Dockerfile 首先,

  • 浅谈使用Maven插件构建Docker镜像的方法

    本文介绍了使用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-pl

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

    背景 微服务架构下,微服务在带来良好的设计和架构理念的同时,也带来了运维上的额外复杂性,尤其是在服务部署和服务监控上.单体应用是集中式的,就一个单体跑在一起,部署和管理的时候非常简单,而微服务是一个网状分布的,有很多服务需要维护和管理,对它进行部署和维护的时候则比较复杂. 下面从Dev的角度来看一下Ops的工作.从Dev提交代码,到完成集成测试的一系列步骤如下: 首先是开发人员把程序代码更新后上传到Git,然后其他的事情都将由Jenkins自动完成. 然后Git在接收到用户更新的代码后,会把消息

  • 通过Dockerfile构建Docker镜像的方法步骤

    Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建. Dockerfile支持Shell类的行尾添加"\"的命令换行方式,以及行首"#"进行注释的格式. 使用Dockerfile构建Docker镜像时注意事项: (1).尽量选取满足需求但较小的基础系统镜像; (2).清理编译生成文件.安装包的缓存等临时文件; (3).安装各个软件时候要指定准确的版本号,并避免引入不

  • Docker构建kubectl镜像的实现步骤

    假如程序服务是使用 k8s 集成 gitlab ci/cd 方式部署的,在 gitlab-ci 过程中就需要用到 kubeclt 镜像 使用 docker 构建 kubectl 镜像有两种方式 方式一 (镜像相对较小一点,45.8M左右) 在 Linux 上使用 curl 安装 kubectl 可执行文件 cd /usr/local/bin curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.20.1/bin

  • 如何基于Jenkins构建Docker镜像

    这篇文章主要介绍了基于Jenkins构建Docker镜像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前提意义: SpringCloud微服务里包含多个文件夹,拉取仓库的所有代码,然后过根据选项参数使用maven编译打包指定目录的jar,然后再根据这个目录的Dockerfile文件制作Docker镜像 1. SpringCloud项目结构 注意Dockerfile文件的位置,跟src和pom.xml同级,后面会用到这个文件,若不同级,后面选择

  • SpringBoot构建Docker镜像的3种方式

    本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像. (1)使用 spring-boot-maven-plugin 内置的 build-image. (2)使用 Google 的 jib-maven-plugin. (3)使用 dockerfle-maven-plugin. Spring Boot 应用 为了方便实践,需要一个 Spring Boot 项目. Demo 项目地址: https://github.com/davelms/medium-ar

  • SpringBoot创建Docker镜像的方法步骤

    随着越来越多的组织转向容器和虚拟服务器,Docker正成为软件开发工作流程中一个更重要的部分.为此,Spring Boot 2.3中最新的功能之中,提供了为Spring Boot应用程序创建 Docker 镜像的能力. 这篇文章的目的,就是为了给大家介绍如何为 Spring Boot 应用程序创建 Docker 镜像. 1. 传统Docker构建 使用Spring Boot 构建 Docker 镜像的传统方法是使用 Dockerfile .下面是一个简单的例子: FROM openjdk:8-j

  • Spring Boot 2.4 新特性之一键构建Docker镜像的过程详解

    背景 在我们开发过程中为了支持 Docker 容器化,一般使用 Maven 编译打包然后生成镜像,能够大大提供上线效率,同时能够快速动态扩容,快速回滚,着实很方便.docker-maven-plugin 插件就是为了帮助我们在 Maven 工程中,通过简单的配置,自动生成镜像并推送到仓库中. spotify .fabric8 这里主要使用的主要是如下两种插件 spotify .fabric8 , - -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile 通过调用

  • Jenkins打包微服务构建Docker镜像运行的实现

    目录 环境准备 开始 1.GitLab远程仓库创建微服务项目 2.IDEA代码推送到Gitlab 3.Jenkins创建流水线项目 4.参数化构建 5.拉取远程仓库的构建脚本 6.编写远程审查脚本sonar-project.properties 构建脚本 环境准备 1.Jenkins 2.GitLab 3.SonarQube 4.Harbor 5.Docker 6.Maven 7.JDK1.8 8.微服务项目 以上技术部分在我之前的文章中有写过 这里就不过多细化的演示,本文章主要是连贯性的将微服

随机推荐