SpringBoot从入门到精通教程(十)- Docker集成+容器化部署详解/下篇-使用Dockerfile进行构建

需求背景

可先查看上篇: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的过程了

完整源码下载

我的Github源码地址:

https://github.com/hemin1003/spring-boot-study/tree/master/spring-boot2-study/spring-boot2-parent/spring-boot2-dockerfile

附加资料

1. Docker从入门到精通教程

2. Docker常用命令用法

3. Docker Run命令用法详解

4. docker logs详细用法:查看容器日志

下一章教程

SpringBoot从入门到精通教程(十一)- 分布式缓存Redis整合/解决中文乱码问题

该系列教程

SpringBoot从入门到精通教程

 

 

至此,全部介绍就结束了

 

------------------------------------------------------

------------------------------------------------------

 

关于我(个人域名)

我的开源项目集Github

 

期望和大家一起学习,一起成长,共勉,O(∩_∩)O谢谢

欢迎交流问题,可加个人QQ 469580884,

或者,加我的群号 751925591,一起探讨交流问题

不讲虚的,只做实干家

Talk is cheap,show me the code

如果觉得内容赞,您可以请我喝杯咖啡:

        

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页