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.-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部署的更多相关文章
- Maven+Docker 部署
Maven+Docker 部署 安装jdk8镜像 docker pull openjdk:8-jdk-alpine maven插件推送方式 修改/etc/docker/daemon.json文件,加入 ...
- Docker化tomcat 并且使用maven热部署
今天没事干 就把自己的tomcat docker化并且使用maven实现热部署 特别记录一下~ 1.首先进行centos7的安装 就不在记录了 注意的是最好使用centos7 因为docker 依赖 ...
- 转 使用Docker部署 spring-boot maven应用
转自:https://blog.csdn.net/u011699931/article/details/70226504/ 使用Docker部署 spring-boot maven应用 部署过程分为以 ...
- Jenkins+Docker部署Maven聚合工程
这几天,把公司的预发布环境,改成docker部署,遇到了一些坑,有jenkins里的部署脚本的问题,也有harbor仓库的问题,还有docker远程访问的问题,还有DooD....一堆坑 Jenkin ...
- Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- 使用Docker部署Spring boot项目
Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...
- Spring Boot2.0:使用Docker部署Spring Boot
一.Spring Boot项目添加 Docker 支持1.在pom.xml中添加 Docker 构建插件 <plugins> <!-- Docker maven plugin --& ...
- (转)Spring Boot 2 (四):使用 Docker 部署 Spring Boot
http://www.ityouknow.com/springboot/2018/03/19/spring-boot-docker.html Docker 技术发展为微服务落地提供了更加便利的环境,使 ...
- 使用docker部署springboot
首先创建一个简单的springboot web项目 创建一个 DockerController,在其中有一个index()方法,访问时返回:Hello Docker! @RestController ...
随机推荐
- 【转】 纯技术帖:MMOG网络同步算法揭秘
http://www.360doc.com/content/12/0723/11/110467_225954142.shtml 来源:网络 概述 游戏发展从单机游戏到局域网游戏再到mmog(Massi ...
- 【转载】 Pytorch(0)降低学习率torch.optim.lr_scheduler.ReduceLROnPlateau类
原文地址: https://blog.csdn.net/weixin_40100431/article/details/84311430 ------------------------------- ...
- 查询表Or列的注释信息
需求:开发人员需要DBA支持,查询表的注释说明,用于明确表的用途. 1.测试 session 1 创建测试表SQL> create table a_emp as select * from sc ...
- Foxmail软件添加QQ邮箱报错
#报错现象: -ERR Please using authorized code to login. More information at http://servi 请使用授权代码登录.http:/ ...
- git get submodule after clone
/********************************************************************************* * git get submodu ...
- Python urllib.quote
转: 编码:urllib.quote(string[, safe]),除了三个符号“_.-”外,将所有符号编码,后面的参数safe是不编码的字符, 使用的时候如果不设置的话,会将斜杠,冒号,等号,问号 ...
- JAVA基础部分复习(二、集合类型)
对于这些常用的集合,建议还是需要先了解一下底层实现原理,这样在不同的使用场景下才能选择更好的方案. Set介绍以及对比,常用方法: package cn.review.day02; import ja ...
- WCF 添加服务引用 HTTP 请求已超过为 00:00:00 分配的超时。为此操作分配的时间可能是较长超时
今天在用公司的笔记本引用WCF的时候,处于一直等待的过程,一直在下载信息,一直等了很长时间,弹出了一个消息 下载“http://ip:8085/xxxxx/xxxxx/mex/$metadata”时出 ...
- vue查缺补漏题
一.对于MVVM的理解? MVVM 是 Model-View-ViewModel 的缩写.Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑.View 代表UI 组件,它负责将数 ...
- Thread_run()方法
cas 1: package threadTest; public class ThreadTest { public static void main(String[] args) { Thread ...