当前位置: 首页 > news >正文

Maven Docker部署

镜像构建方式

  docker-maven-plugin插件构建docker镜像有两种方式:
  1. 指定参数,由docker-maven-plugin插件根据这些参数来制作镜像;
  2. 指定Dockerfile,这和我们用docker build命令来构建镜像的过程一样,不过docker-maven-plugin帮我们把工程构建和镜像构建两件事串起来了;

接下来我们将上述两种方式都实践一下;

第一种构建方式:通过参数构建

  在mavendockerplugindemo工程目录下新建文件pom_1_by_param.xml,内容和pom.xml一样,然后我们再去<plugins>节点添加以下内容,放在原有的<plugin>节点后面,如下所示:

      <plugins>
            <!--这是原有的spring boot插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!--新增的docker maven插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <!--docker镜像相关的配置信息-->
                <configuration>
                    <!--镜像名,这里用工程名-->
                    <imageName>${project.artifactId}</imageName>
                    <!--TAG,这里用工程版本号-->
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                    </imageTags>
                    <!--镜像的FROM,使用java官方镜像-->
                    <baseImage>java:8u111-jdk</baseImage>
                    <!--该镜像的容器启动后,直接运行spring boot工程-->
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--构建镜像的配置信息-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
      </plugins>

上面的每个参数都已加了注释,就不多说了,在此文件所在目录执行以下命令,指定pom_1_by_param.xml作为pom文件执行maven构建:

mvn clean package docker:build

执行成功后输出以下信息:

[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ mavendockerplugindemo ---
[INFO] Building jar: /usr/local/work/mavendockerplugindemo/target/mavendockerplugindemo-0.0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.5.9.RELEASE:repackage (default) @ mavendockerplugindemo ---
[INFO] 
[INFO] --- docker-maven-plugin:0.4.12:build (default-cli) @ mavendockerplugindemo ---
[INFO] Copying /usr/local/work/mavendockerplugindemo/target/mavendockerplugindemo-0.0.1-SNAPSHOT.jar -> /usr/local/work/mavendockerplugindemo/target/docker/mavendockerplugindemo-0.0.1-SNAPSHOT.jar
[INFO] Building image mavendockerplugindemo
Step 1/3 : FROM java:8u111-jdk
 ---> d23bdf5b1b1b
Step 2/3 : ADD /mavendockerplugindemo-0.0.1-SNAPSHOT.jar //
 ---> 74f201b46c92
Removing intermediate container cbc9e456d139
Step 3/3 : ENTRYPOINT java -jar /mavendockerplugindemo-0.0.1-SNAPSHOT.jar
 ---> Running in 256a09be033d
 ---> ad342e51021e
Removing intermediate container 256a09be033d
Successfully built ad342e51021e
[INFO] Built mavendockerplugindemo
[INFO] Tagging mavendockerplugindemo with 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.617 s
[INFO] Finished at: 2017-12-23T00:00:06-08:00
[INFO] Final Memory: 35M/84M
[INFO] ------------------------------------------------------------------------

执行docker images命令可以看到如下信息,新的镜像已经创建好了:

root@instance-282sg05l:/kitking/app/girl# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
girl                0.0.1-SNAPSHOT      e6d299ed7821        13 minutes ago      660MB
girl                latest              e6d299ed7821        13 minutes ago      660MB
delron/fastdfs      latest              8487e86fc6ee        7 months ago        464MB
java                8u111-jdk           d23bdf5b1b1b        22 months ago       643MB

验证第一种方式构建的镜像
执行以下命令,使用刚刚构建的镜像创建一个容器:

docker run --name kitking -p 8081:8081 girl

第二种构建方式:指定Dockerfile

  这种方式要我们自己写Dockerfile,好处是可以按照自己的需要在Dockerfile中添加更多内容,而不像第一种方式那样只能按照插件的参数规则来配置;

       <!--新增的docker maven插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.12</version>
                <!--docker镜像相关的配置信息-->
                <configuration>
                    <!--镜像名,这里用工程名-->
                    <imageName>${project.artifactId}</imageName>
                    <!--Dockerfile文件所在目录-->                 
            <dockerDirectory>${project.basedir}/docker/Dockerfile</dockerDirectory> <!--TAG,这里用工程版本号--> <imageTags> <imageTag>${project.version}</imageTag> </imageTags> <!--构建镜像的配置信息--> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>

 

在工程的src/main/docker/目录下新建Dockerfile文件,如下图:

Dockerfile的内容如下,就是将工程构建完毕后的jar包复制到home目录,然后构建镜像:

 

ENV ARTIFACTID mavendockerplugindemo
ENV ARTIFACTVERSION 0.0.2-SNAPSHOT
ENV HOME_PATH /home

ADD /$ARTIFACTID-$ARTIFACTVERSION.jar $HOME_PATH/mavendockerplugindemo.jar

WORKDIR $HOME_PATH

ENTRYPOINT ["java","-jar","mavendockerplugindemo.jar"]

可以开始构建了:

mvn clean package docker:build

 

相关文章:

  • Django(六)模型(model)系统 -- 常用查询语法及进阶
  • Yii php 环境配置on ubuntu 12.04
  • 带动画的登录页面
  • JAVA中equal()和==的区别
  • 区块链软件公司:区块链技术能带来什么
  • Android:让WebView支持input type=”file”…元素
  • P3235 [HNOI2014]江南乐
  • ZYNQ的数据处理能力
  • Keras之父:比特币网络危机重重
  • 提高sql2005中带freetexttable和rank的全文检索的速度
  • js中if else switch 条件判断的替代方法
  • 菜根谭#142
  • 活在台积电的阴影下
  • 个性化注册表单
  • Implicit declaration of function 'CC_MD5' is invalid in C99
  • python3.6+scrapy+mysql 爬虫实战
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [数据结构]链表的实现在PHP中
  • 5、React组件事件详解
  • CentOS 7 防火墙操作
  • co模块的前端实现
  • export和import的用法总结
  • Git初体验
  • Javascript 原型链
  • JS笔记四:作用域、变量(函数)提升
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • php的插入排序,通过双层for循环
  • 百度小程序遇到的问题
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端知识点整理(待续)
  • 区块链将重新定义世界
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 用 Swift 编写面向协议的视图
  • 用Canvas画一棵二叉树
  • 交换综合实验一
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • # 安徽锐锋科技IDMS系统简介
  • #define、const、typedef的差别
  • #考研#计算机文化知识1(局域网及网络互联)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (42)STM32——LCD显示屏实验笔记
  • (C语言)二分查找 超详细
  • (day 12)JavaScript学习笔记(数组3)
  • (独孤九剑)--文件系统
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (理论篇)httpmoudle和httphandler一览
  • (论文阅读40-45)图像描述1
  • (一)Linux+Windows下安装ffmpeg
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)