docker部署springboot项目实践(更新无需重新build)
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、问题</a></li><li><a href="#_label1">二、环境</a></li><li><a href="#_label2">三、部署jar包</a></li><li><a href="#_label3">四、更新jar包</a></li><li><a href="#_label4">总结</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、问题</h2><p>之前的文章记录过利用docker部署springboot项目,使用的方式是直接将jar一起打包,构建成一个新的镜像,再运行镜像的方式进行部署,然而这里有一种缺点,就是后面更新jar包,都需要删掉旧的镜像,重新build,再运行,为了解决这种问题,下面列了部署springboot项目的另一种姿势。</p>
<p class="maodian"><a name="_label1"></a></p><h2>二、环境</h2>
<p>以下是本人此次搭建的环境</p>
<ul><li>部署方式:docker</li><li>服务器:linux服务器</li><li>服务器操作系统:CentOS 7</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>三、部署jar包</h2>
<p>先创建springboot项目,并且确保可以运行,下面简单写了一个接口</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432673.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432642.png" /></p>
<p>再将该项目进行maven打包生成一个jar,然后在linux服务器上面创建一个目录存放该jar包,如下图</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432623.png" /></p>
<p>然后在linux服务器上面创建一个目录,用于存放Dockerfile文件,如下图</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432686.jpg" /></p>
<p>Dockerfile里面的内容如下</p>
<div class="jb51code"><pre class="brush:bash;">FROMjava
EXPOSE 8001
ENTRYPOINT ["java","-Xmx256m","-Xms256m","-jar","/data/java/jar/springboot-docker-test.jar"]
</pre></div>
<p>注意:</p>
<p>这里的/data/java/jar/springboot-docker-test.jar路径是后续容器里面运行的jar包的路径,路径可以自己随便定义,后面我们会在宿主机上面把这个路径挂载出来即可</p>
<p>在Dockerfile路径下构建镜像</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432686.jpg" /></p>
<p>构建成功后,启动容器</p>
<div class="jb51code"><pre class="brush:bash;">docker run -d -p 8001:8001 --name test1 -it -v /root/data/docker_data/springboot-docker-test/jar:/data/java/jarspringboot-test</pre></div>
<p>注:</p>
<p>(1)重点说明一下”-v /root/data/docker_data/springboot-docker-test/jar:/data/java/jar“这个命令,/root/data/docker_data/springboot-docker-test/jar这个路径是我们把打包的jar上传到linux服务器上面的路径,/data/java/jar这个路径是Dockerfile文件里面执行命令的路径(ENTRYPOINT),意思就是把宿主机的jar路径挂载进容器里面去,这样启动的时候用的jar包就是宿主机的jar包,后续更新jar的时候,只要替换宿主机的jar即可,之后容器重新启动就实现了更新</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432681.png" /></p>
<p>启动后访问路径</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432653.png" /></p>
<p class="maodian"><a name="_label3"></a></p><h2>四、更新jar包</h2>
<p>例如在原来的代码上,又新加了个接口</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432658.png" /></p>
<p>然后重新maven打包,再把jar替换掉服务器上面的jar即可,记得jar名称得保持一致</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202601/2026010609432670.png" /></p>
<p class="maodian"><a name="_label4"></a></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p> 看到前辈分享的这个docker部署SpringBoot项目的教程,真的很实用!之前我部署项目的时候也是每次更新都要重新build镜像,特别麻烦,尤其是项目比较大的情况下构建一次要等很久。
学到的一个关键点:
使用-v参数挂载宿主机目录到容器内这个思路真的很巧妙,这样只需要保持jar包名称不变,直接替换文件就能实现热更新,完全不需要重新构建镜像,省时又省力!
想补充几点:
[*]数据持久化:除了jar包,如果项目有配置文件或者日志需要保留,也可以考虑挂载出来,这样更方便管理和维护。
[*]健康检查:可以在docker run的时候加上--restart=always参数,这样容器异常退出后会自动重启,生产环境会更稳定。
[*]多实例部署:如果需要部署多个实例,只需要修改容器名称和端口号即可,镜像不需要重新构建,复用性很强。
最后一个小建议:
如果是生产环境,建议配合docker-compose来管理容器,这样启动、停止、更新会更加方便,一条命令就能搞定所有操作。
总之非常感谢前辈的分享,这种不重新build就能更新的方式太香了!👍
頁:
[1]