你想要的Docker自动部署Spring Boot就在这
1|0你想要的Docker自动部署Spring Boot就在这
2|0简介
Spring Boot的快速开发特性,正受越来越多Java开发者的欢迎,配合supervisord可以轻松使其作为一个独立的服务运行。而随着Docker的流行,其轻量级、进程级、资源隔离等特性,使Spring Boot的部署、运行更加灵活,若将其打包成Docker镜像可以真正做到“一次打包,到处运行”,有效的解决了开发、测试、预生产、生产等环境的差异。
下面我们就从Docker手动、自动部署Spring Boot项目来讲解下,Docker是如何轻松部署的。因此你想要的Docker自动部署Spring Boot就在这了。
我们正式开始讲解吧。
3|0手动构建spring boot应用
此部分通过直接手动打包、Docker手动部署Spring Boot,运行helloworld项目。
helloworld应用
- 创建spring boot工程
使用IntelliJ IDEA的“Spring Assistant”插件创建spring web项目
Group id: com.docker
Artifact id: hellworld
Project name: helloworld
Package name: com.docker.helloworld
- 创建HelloworldController
- 编译运行
maven手动打包后并运行jar包,通过localhost:8080可以直接hellworld项目了,下面手动将jar包放到Docker中运行。
docker构建镜像
- Dockerfile
- 构建镜像并运行容器
利用Dockerfile构建一个运行helloworld的镜像,基与这个镜像启动容器后,我们可以通过localhost:8080访问了helloworld了。
以上两步其实就是Docker自动部署Spring Boot主要完成的两个步骤,整个过程不是手动完成,而下面要讲的是通过maven提供的插件自动完成build、tag、push镜像。
4|0自动构建Spring Boot
配置maven插件
maven插件docker-maven-plugin可以打包应用并将构建docker镜像,推送到docker仓库。
其中:
- <imageName> 是构建镜像的名称;
- <dockerDirectory>是Dockerfile位置,最好是只有Dockerfile,因为在mvn打包时此目录下的所有文件包括Dockerfile将会被copy到${project.build.directory}/docker目录下,此目录一般是target/docker目录;
- <resource>作用是将${project.build.directory}目录下的${project.build.finalName}.jar,复制到${project.build.directory}/docker目录下;如:将target/helloworld-0.0.1-SNAPSHOT.jar 文件复制到target/docker/下;
打包构建
- maven可以直接将应用打包成docker镜像
其中:第Step 4/5、Step 5/5可以看到copy过程,剩下为从Dockerfile构建镜像过程。
- 查看并运行打包后的镜像
从以上看出此镜像是没有tag,通过以下方式添加tag:
如上,我们通过两种方式给镜像添加了test和v1两个tag。了解如何添加tag后,就会明白后面的push镜像的配置。
以上是通过maven自动构建镜像并添加tag,但是还没有完成自动推送远程仓库,咱们将继续讲解。
5|0推送镜像到远程仓库阿里云镜像库
- 创建仓库
在阿里云容器镜像服务创建仓库
- maven配置镜像库认证
在maven配置文件中指定远程的镜像仓库
- pom.xml配置
配置pom.xml是因为这些都是maven自动构建、推送镜像的基础参数。
- 构建并push
此处需要注意:
最后查看下阿里云的镜像库:
整个推送的过程关键点在远程仓库的认证及将镜像添加tag与远程镜像一致。
以上为maven 构建、tag、推送的整个步骤,前提是要保证pom.xml中的配置信息没有错误。其实我们还可以将Docker的构建过程绑定到maven的各个阶段,我们再来深入讲解下。
6|0绑定Docker命令到Maven各个阶段
Docker 构建过程为 build、tag、push,其中build、tag对应mvn的package阶段,push对应mvn的deploy。通过将docker命令绑定到mvn的各个阶段,我们可以通过mvn deploy实现构建并push的过程。
补充:
- package阶段实现项目编译、单元测试、打包功能,但没有把打好的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库;
- install阶段实现项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)布署到本地maven仓库,但没有布署到远程maven私服仓库;
- deploy阶段实现项目编译、单元测试、打包功能,同时把打好的可执行jar包(war包或其它形式的包)部署到本地maven仓库和远程maven私服仓库;
1.pom.xml配置插件
注意:一定要通过maven-deploy-plugin设置skip,否则mvn deploy 推送时报错:
2.执行命令
注意:
- 经测试发现,实际<goal>tag</goal>阶段并不会进行tag,而是在<imageName>registry.cn-qingdao.aliyuncs.com/test/test</imageName>进行tag,如果你的imageName设置不正确,则不会推送到自定义仓库,而是默认的官方仓库
- 此方式会将镜像的所有tag 版本,如v3和latest都会推送到远程仓库;
通过对比,"docker命令绑定maven各阶段"方式不太灵活,因为这会将镜像所有tag进行推送;而使用不绑定到maven阶段的可以自由设置推送到远程仓库的tag,这点更灵活。我们需要根据实际情况自由选择。
7|0总结
通过以上讲解,我们应该知道Docker部署Spring Boot的原理及细节,剩下只需要在客户端直接运行就可以,真正做到“一次打包,到处运行”。如果你完全掌握那么Docker算是入门了。但是这对于Docker的深入应用还远远不够,在实际过程中我们还需要考虑以下问题:
- Spring Boot应用的运行时数据、日志文件的持久化;
- 镜像命令、目录问题、私有镜像库等的配合使用;
- 流水线操作实现测试、版本发布等;
- Docker 健康检查等;
这些需要我们通过不断实践,完善开发、运维、测试等在应用中的需求才能做到的,因此让我们行动起来吧。
__EOF__

本文链接:https://www.cnblogs.com/caicz/p/16593851.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)