需求背景
可先查看上篇:Docker集成+容器化部署详解/上篇
基本用法:使用Maven插件构建Docker镜像,通过Dockerfile进行构建,然后可以结合Jenkins一起使用(Jenkins教程)
准备内容
确保本机上已安装好Docker软件(Docker系列教程)
代码演示
项目目录结构:
1. docker-maven-plugin插件(官方地址)
本项目中使用的docker的maven插件
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
2. 新建Dockerfile文件
在src/main/docker目录下,建立文件Dockerfile
FROM java:8
VOLUME /tmp/spring-boot2-dockerfile
ADD spring-boot2-dockerfile.jar spring-boot2-dockerfile.jar
RUN bash -c 'touch /spring-boot2-dockerfile.jar'
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/spring-boot2-dockerfile.jar"]
3. 使用此插件构建Docker镜像
在pom.xml文件中,加入代码:
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<configuration>
<imageName>spring-boot2-dockerfile</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
4. 执行命令,构建镜像
mvn clean package docker:build
正常输出成功日志:
表示构建成功
5. 执行命令docker images,查看镜像
可以看到该项目的镜像:spring-boot2-dockerfile已经被构建成功
docker images
6. 创建容器,启动服务(如果终止,则服务停止了,可增加-d参数,后台运行)
可启动多个服务,分别指定9090 / 9091两个端口
docker run -p 9090:9090 spring-boot2-dockerfile
docker run -p 9091:9090 spring-boot2-dockerfile
7. 测试访问:localhost:9090/hello 或 localhost:9091/hello
8. 如果终止服务,可重新启动服务(Docker常用命令用法教程)
使用docker ps -a,查看已停用服务
然后使用docker start 容器id,启动服务
最后使用docker logs查看程序日志
详细内容这里省略了,可以查看上篇:Docker集成+容器化部署详解/上篇
9. 将插件绑定在某个phase执行
在一些场景下,我们会有这样的需求,例如:执行mvn clean package时,希望能自动地构建docker镜像,可行吗?
可以的,只需要将插件的goal绑定在某个phase即可。
对于phase和goal,可这样理解:maven命令格式是:mvn phase:goal ,例如mvn package docker:build,那package和 docker都是phase,build则是goal
完整代码是这样:
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.12</version>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<imageName>spring-boot2-dockerfile</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
新增了这部分代码:
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
这样就可以了,即:把docker的build目标绑定在package的phase上了
这样我们只需要执行mvn package,就会自动执行mvn docker:build的过程了
完整源码下载
附加资料
下一章教程
SpringBoot从入门到精通教程(十一)- 分布式缓存Redis整合/解决中文乱码问题
该系列教程
至此,全部介绍就结束了
------------------------------------------------------
------------------------------------------------------
关于我(个人域名)
期望和大家一起学习,一起成长,共勉,O(∩_∩)O谢谢
欢迎交流问题,可加个人QQ 469580884,
或者,加我的群号 751925591,一起探讨交流问题
不讲虚的,只做实干家
Talk is cheap,show me the code
如果觉得内容赞,您可以请我喝杯咖啡: