文章目录有道无术,术尚可求,有术无道,止于术。
本系列Spring Boot版本2.7.0
- 前言
- 1. 设置Docker 守护程序地址
- 2. 编写POM
- 3. 执行打包
随着云原生技术的火热,Docker 、K8S等容器技术已经成为很多企业的不二选择,实际开发中,就需要将应用程序打包为镜像了,在Spring Boot 中一般都会使用Maven 插件来进行镜像打包。
在其他系列的博客中,也介绍过一些插件,比如:
- K8S入门系列(10)-使用开源项目io.fabric8之docker-maven-plugin插件打包Docker镜像至私服
- K8S入门系列(8)-Spring Boot使用jib打包Docker镜像至私服
以上两种插件的主要区别是一个需要写Dockerfile 文件,一个是直接将构建信息写在POM中。
Spring Boot 官文中对镜像打包功能描述为Packaging OCI Images`(打包为OCI 镜像)。
为了推进容器化技术的工业标准化,2015 年 6 月在 DockerCon 上 Linux 基金会与 Google,华为,惠普,IBM,Docker,Red Hat,VMware 等公司共同宣布成立开放容器项目(OCP),后更名为 OCI。它的主要目标便是 建立容器格式和运行时的工业开放通用标准。
所以 OCI就是一个规范,发展至今, OCI 制定的主要标准有三个分别是 runtime-spec 、image-spec 和 distribution-spec 这三个标准分别定义了容器运行时,容器镜像还有分发的规范。
Spring Boot 2.4 推出了自己的 docker 构建工具整合在原有的spring-boot-maven-plugin中,只需要配置对应目标仓库和主机信息即可完成镜像构建。
下面我们说用Spring Boot 提供的Maven 插件来看下如何打包镜像。
1. 设置Docker 守护程序地址build-image命令需要访问 Docker 守护程序。默认情况下,它将通过本地连接与 Docker 守护进程通信。
可以通过两种方式设置:
- 环境变量
- 插件配置
可以设置环境变量来配置本地或远程连接。下表显示了环境变量及其值:
| 环境变量 | 描述 |
|---|---|
| DOCKER_HOST | 包含 Docker 守护程序的主机和端口的 URL - 例如tcp://192.168.99.100:2376 |
| DOCKER_TLS_VERIFY | 是否启用HTTPS 协议 |
| DOCKER_CERT_PATH | HTTPS 证书和密钥文件的路径 |
也可以在插件中配置中的参数,下表总结了可用参数:
| 标签 | 作用 |
|---|---|
| host | 包含 Docker 守护程序的主机和端口的 URL - 例如tcp://192.168.99.100:2376 |
| tlsVerify | 是否启用HTTPS 协议 |
| certPath | HTTPS 证书和密钥文件的路径 |
| bindHostToBuilder | 如果为true,则主机属性的值将提供给为CNB生成器创建的容器(可选) |
在构建时,会优先使用环境变量中的配置,如果之前Windows安装了Dokcer ,可以配置了这些变量,所以执行命令的时候需要检查是否配置了环境变量。
2. 编写POM我们写一个很简单的配置,配置了打包为镜像、并发布到远程私服。
org.springframework.boot spring-boot-maven-plugin 2.7.0 192.168.8.88/library/${project.artifactId}:${project.version} true http://192.168.8.88:2375 false admin 123456 >http://192.168.8.88 user@example.com
然后依次检查是否存在Dokcer 相关的环境变量:
这里发现我之前设置了。。。所以可以删除这个变量,或者在执行MVN 命令的窗口,临时删除。
先删除这个环境变量:
再使用mvn spring-boot:build-image 执行打包,可以看到首先去docker 官方下载了很多东西:
然后又去GitHub 下载了很多东西。。结果下载失败了。。。
试了几次还是下载不下来,应该有其他办法解决这个问题,但是懒得试了。。。到此结束吧。
总结: 官网插件并不太友好,而且功能也没有其他专业插件多,所以目前还是不推荐使用。。。
感兴趣的可以参考官网自己研究。



