放弃Dockerfile 部署 Spring Boot,来和谷歌的Jib插件 PY一下
放弃Dockerfile 部署 Spring Boot,来和谷歌的Jib插件 PY一下
说明
Jib 为 Java 应用程序构建优化的 Docker 和OCI映像,无需 Docker 守护进程,并且对 Docker 最佳实践没有深度掌握。它作为Maven和Gradle的插件以及 Java 库提供。
Jib 使用 Java 开发,使用也非常简单,可以作为 Maven 或者 Gradle 的插件直接集成到我们的项目中。它利用镜像分层和注册表缓存来实现快速、增量的构建。Jib 会自动读取项目的构建配置,代码组织到不同的层(依赖项、资源、类)中,然后它只会重新构建和推送发生变更的层。在项目进行快速迭代时,Jib 只将发生变更的层推送到 registers 来缩短构建时间。
这是谷歌开源的一个容器化运行方案,使用它我们将 Spring Boot 进行容器化部署只要两步:
- 第一步配置 Maven Plugin
- 第二步构建
使用
如果需要推送到官方的 Docker Hub,需要提前准备一个 Docker Hub 的账号,账号可以直接去 Docker Hub 上面注册(https://hub.docker.com/)
接下来我们搭建一个简单web工程:
我们只需要一个接口就可以了
重点是在 pom.xml 中添加上 Jib 的插件,如下:
1 | <build> |
配置含义
- 首先就是版本号的问题,我这里使用的是 2.2.0 ,网上有的教程比较老,用的 0.x 的版本,老的版本在配置 Docker 认证的时候非常麻烦,所以版本这块建议大家使用当前最新版。
- from 中的配置表示本镜像构建所基于的根镜像为 openjdk:alpine
- to 中的配置表示本镜像构建完成后,要发布到哪里去,如果是发布到私有镜像站,就写自己私有镜像站的地址,如果是发布到 Docker Hub 上,就参考我这里的写法 docker.io/hwyxy/hellojib,其中 hwyxy 表示你在 Docker Hub 上注册的用户名,hellojib 表示你镜像的名字,可以随意取(大写字母可能会出错)。
- tags 中配置的是自己镜像的版本。
- auth 中配置你在 Docker Hub 上的用户名/密码。
- executions 节点中的就是常规配置了,我就不再多说了。
配置完成后,在命令行执行如下命令将当前下项目构建成一个 Docker 镜像并 push 到 Docker Hub:
1 | mvn compile jib:build |
上图说明我们打包推送成功了,然后我们去docker hub上去看看有没有我们的镜像。
接下来,启动 Docker ,在 Docker 中执行如下命令拉取镜像下来并运行:
1 | docker run -d --name mydockerjib -p 8080:8080 docker.io/hwyxy/hellojib:v1 |
访问一下,没有问题
当然如果你不想推送到docker hub,你本地安装了docker,只想在本地运行也是可以的,打包命令如下:
1 | mvn compile jib:dockerBuild |
我们去使用如下命令去看看本地镜像:
1 | docker images |
本地启动(最后面那个参数是镜像的id):
1 | docker run -d --name mydockerjib -p 8080:8080 cf83009d2e5d |
代码:https://github.com/HWYWL/spring-boot-2.x-examples/tree/master/spring-boot-jib
问题建议
- 联系我的邮箱:ilovey_hwy@163.com
- 我的博客:https://www.hwy.ac.cn
- GitHub:https://github.com/HWYWL