镜像构建方式

  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.-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.5..RELEASE:repackage (default) @ mavendockerplugindemo ---
[INFO]
[INFO] --- docker-maven-plugin:0.4.:build (default-cli) @ mavendockerplugindemo ---
[INFO] Copying /usr/local/work/mavendockerplugindemo/target/mavendockerplugindemo-0.0.-SNAPSHOT.jar -> /usr/local/work/mavendockerplugindemo/target/docker/mavendockerplugindemo-0.0.-SNAPSHOT.jar
[INFO] Building image mavendockerplugindemo
Step / : FROM java:8u111-jdk
---> d23bdf5b1b1b
Step / : ADD /mavendockerplugindemo-0.0.-SNAPSHOT.jar //
---> 74f201b46c92
Removing intermediate container cbc9e456d139
Step / : ENTRYPOINT java -jar /mavendockerplugindemo-0.0.-SNAPSHOT.jar
---> Running in 256a09be033d
---> ad342e51021e
Removing intermediate container 256a09be033d
Successfully built ad342e51021e
[INFO] Built mavendockerplugindemo
[INFO] Tagging mavendockerplugindemo with 0.0.-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11.617 s
[INFO] Finished at: --23T00::-:
[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.-SNAPSHOT e6d299ed7821 minutes ago 660MB
girl latest e6d299ed7821 minutes ago 660MB
delron/fastdfs latest 8487e86fc6ee months ago 464MB
java 8u111-jdk d23bdf5b1b1b months ago 643MB

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

docker run --name kitking -p : 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.-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

Maven Docker部署的更多相关文章

  1. Maven+Docker 部署

    Maven+Docker 部署 安装jdk8镜像 docker pull openjdk:8-jdk-alpine maven插件推送方式 修改/etc/docker/daemon.json文件,加入 ...

  2. Docker化tomcat 并且使用maven热部署

    今天没事干 就把自己的tomcat  docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...

  3. 转 使用Docker部署 spring-boot maven应用

    转自:https://blog.csdn.net/u011699931/article/details/70226504/ 使用Docker部署 spring-boot maven应用 部署过程分为以 ...

  4. Jenkins+Docker部署Maven聚合工程

    这几天,把公司的预发布环境,改成docker部署,遇到了一些坑,有jenkins里的部署脚本的问题,也有harbor仓库的问题,还有docker远程访问的问题,还有DooD....一堆坑 Jenkin ...

  5. Spring Boot 2.0(四):使用 Docker 部署 Spring Boot

    Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...

  6. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  7. Spring Boot2.0:使用Docker部署Spring Boot

    一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...

  8. (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot

    http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...

  9. 使用docker部署springboot

    首先创建一个简单的springboot web项目 创建一个 DockerController,在其中有一个index()方法,访问时返回:Hello Docker! @RestController ...

随机推荐

  1. 【转】 纯技术帖:MMOG网络同步算法揭秘

    http://www.360doc.com/content/12/0723/11/110467_225954142.shtml 来源:网络 概述 游戏发展从单机游戏到局域网游戏再到mmog(Massi ...

  2. 【转载】 Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类

    原文地址: https://blog.csdn.net/weixin_40100431/article/details/84311430 ------------------------------- ...

  3. 查询表Or列的注释信息

    需求:开发人员需要DBA支持,查询表的注释说明,用于明确表的用途. 1.测试 session 1 创建测试表SQL> create table a_emp as select * from sc ...

  4. Foxmail软件添加QQ邮箱报错

    #报错现象: -ERR Please using authorized code to login. More information at http://servi 请使用授权代码登录.http:/ ...

  5. git get submodule after clone

    /********************************************************************************* * git get submodu ...

  6. Python urllib.quote

    转: 编码:urllib.quote(string[, safe]),除了三个符号“_.-”外,将所有符号编码,后面的参数safe是不编码的字符, 使用的时候如果不设置的话,会将斜杠,冒号,等号,问号 ...

  7. JAVA基础部分复习(二、集合类型)

    对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...

  8. WCF 添加服务引用 HTTP 请求已超过为 00:00:00 分配的超时。为此操作分配的时间可能是较长超时

    今天在用公司的笔记本引用WCF的时候,处于一直等待的过程,一直在下载信息,一直等了很长时间,弹出了一个消息 下载“http://ip:8085/xxxxx/xxxxx/mex/$metadata”时出 ...

  9. vue查缺补漏题

    一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数 ...

  10. Thread_run()方法

    cas 1: package threadTest; public class ThreadTest { public static void main(String[] args) { Thread ...