Buildpacks高效构建Spring Boot应用Docker镜像

网友投稿 298 2022-10-22

Buildpacks高效构建Spring Boot应用Docker镜像

1. 前言

​Spring Boot 2.3.0.RELEASE​ 正式发布了几天了,其中有个新的特性:​可以将 Spring Boot 应用代码直接打包为 Docker 镜像​。这是什么科技?我赶紧去官网查了一番才知道用的是基于云原生的​Buildpacks​技术,这是一个直接将代码转换为容器镜像的技术,它意味着你不用在写​Dockerfile​文件了。

但是 ​Spring Boot 2.3.0.RELEASE​ 的镜像构建插件好像有 BUG,等后续修复吧。​但是本文的相关实践并不采用官方的插件​。

2. 灵魂追问

在了解这种技术之前,我们先想想我们开发的​Java​应用运行起来都需要什么?

首先你得编写业务逻辑代码吧,这是最基本的。你的应用配置环境,也可以成为​Profile​,比如​Spring Boot​应用中 ​​application.yml​​ 的环境配置。特定的语言环境,​Java​需要跑在​JVM​上, 其它语言也对应的需要它们的特定环境。运行时环境,比如我们的​Spring Boot​应用还可能依赖其它中间件、第三方类库等等。

如果我们有一种工具来处理这些问题就好了,我们可以快速的实现从源码到运行时的工作流程。

3. 和 Dockerfile 相比

​Buildpacks​就是来解决这一问题的。这不是重复的轮子!与我们熟悉的​Dockerfile​相比,​Buildpacks​为构建应用程序提供了更高层次的构建抽象。

减轻了开发者的负担,并支持大规模的应用程序的管理。多语言支持,针对特定的编程语言有特定的一揽子构建机制,比如 ​Java​、​Golang​、​Ruby​、​Python​等。保证应用构建的安全性和合规性,而无需开发者干预。提供操作系统级别和应用程序级别的依赖关系升级的自动交付,屏蔽了​Dockerfile​ 的复杂性。提供​merge​功能,让我们可以在原来的基础上增加新的功能和补丁,而无需重新构建。

2. 安装 Buildpacks

目前​Buildpacks​ 支持 ​Linux​、​MacOS​、​Windows​。你可以从 Buildpacks 的官方文档​[1]​获取详细的安装方法,因为过于简单这里不再介绍。

别忘记配置 ​Buildpacks​ 的环境变量。在 ​Win10​ 上需要将 ​Buildpacks​ 的安装目录配置到 ​path​ 环境变量中。

如果​Buildpacks​ 的路径为 ​​D:\pack-v0.10.0-windows\pack.exe​​ 则:

然后命令行执行 ​​pack version​​,打印出版本号就表示安装成功了。

安装​Buildpacks​的先决条件是,拥有​Docker​运行时,你需要在对应操作系统上安装并运行​Docker​ 。

3. 从代码构建 Docker 镜像

这里我们使用一个标准的​Spring Boot​项目,在项目的根目录下需要安装 ​Maven wrapper​。​Maven Wrapper 的作用是:发现用户的 Maven 版本和期望的版本不一致,下载期望的版本,然后用期望的版本来执行 mvn 命令​,安装命令为:

mvn -N io.takari:maven:wrapper

一般从 Spring Initializr​[2]​ 生成的项目都自带​Maven wrapper​。

完成上面的几步之后。执行下面的命令构建​Docker​镜像:

pack build myapp --builder cnbs/sample-builder:bionic

执行完毕后你的 Docker 镜像就构建完毕了,甚至有需要的话你可以再追加 ​​--publisher​​命令将镜像上传到​Docker​镜像仓库。和以往不同的是无需编写​Dockfile​文件。

初次构建的时间可能会比较长,因为要安装一些基础设施,以后再构建就会快得多,因为会重用这些有用的缓存。有兴趣的可以对比一下。

4. 总结

​Buildpacks​是​CNCF​基金会的孵化项目,此次​Spring Boot 2.3.0.RELEASE​和它的结合,是​Spring Boot​构建云原生应用的重要里程碑。后面我会抽时间对​Buildpacks​进行进一步的介绍,敬请关注我的个人博客felord.cn​[3]​。

参考资料

[1]

Buildpacks的官方文档: ​Initializr: ​​https://felord.cn​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java十分钟理清面向对象与类的核心
下一篇:淘东电商项目(40) -Docker下安装Logstash(一次填完所有的坑)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~