Spring Boot 多样化构建 Docker 镜像

随着微服务概念的持续演进,容器化技术的火爆,对于广大基于 Java 语言开发的程序员而言,将开发好的项目快速构建为 Docker 镜像推送至服务器也成为了一项必会的技能。伴随着技术的不断更新,基于 Spring Boot 构建 Docker 镜像的方式也是五花八门,大致分为以下几种:Cloud Native Buildpacks(Spring Boot 2.3+ 版本开始支持)Google 的 jib-maven-pluginfabric8 和 spotify 的 docker-maven-plug
摘要由CSDN通过智能技术生成

随着微服务概念的持续演进,容器化技术的火爆,对于广大基于 Java 语言开发的程序员而言,将开发好的项目快速构建为 Docker 镜像推送至服务器也成为了一项必会的技能。

伴随着技术的不断更新,基于 Spring Boot 构建 Docker 镜像的方式也是五花八门,大致分为以下几种:

Cloud Native Buildpacks(Spring Boot 2.3+ 版本开始支持)
Google 的 jib-maven-plugin
fabric8 和 spotify 的 docker-maven-plugin

下面我们一起学习如何通过这几种方式把 Spring Boot 应用构建成 Docker 镜像。

Spring Boot 项目

先准备一个简单的基于 Maven 的 Spring Boot 项目,方便实践。

pom

继承 spring-boot-starter-parent,引入 Spring Boot 父类依赖。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.0</version>
</parent>
添加 spring-boot-starter-web 依赖。

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

配置文件

配置文件无需添加任何内容,基于约定优于配置,使用默认配置即可。

启动类

@SpringBootApplication
public class SpringBootDockerApplication {
   

    public static void main(String[] args) {
   
        SpringApplication.run(SpringBootDockerApplication.class, args);
    }

}

控制层

@RestController
public class DockerController {
   

    @RequestMapping("/")
    public String index() {
   
        return "Hello Spring Boot Docker!";
    }

}

启动访问

启动项目,浏览器访问:http://localhost:8080/,页面返回:Hello Spring Boot Docker!,说明项目OK,准备工作已完成。

Docker 安装

关于 Docker 的环境准备请参考:Docker 安装及配置镜像加速。

Cloud Native Buildpacks

简介

正所谓哪里有需求,哪里就有市场,传统的方式使用 Spring Boot 构建 Docker 镜像需要我们自己去维护 Dockerfile。

而从 Spring Boot 2.3 版本开始,借助 Buildpacks 的支持,无需 Dockerfile 即可将任何 Spring Boot 2.3 及更高版本的应用程序进行容器化。Spring Boot 2.4 版本开始又进行了进一步优化:官网文档。

说明

Spring Boot 可以快速将 Java 应用程序构建为 Docker 镜像推送至指定远程仓库:

DockerHub 官方公共仓库(DockerHub 官方公共仓库国内访问速度堪忧,不推荐)
阿里云镜像仓库(需要在阿里云登录账号自行创建仓库)
自建私有镜像仓库(本文演示方案)私有镜像仓库搭建请参考:Docker 私有镜像仓库的搭建及认证

使用

完整配置如下:

org.springframework.boot spring-boot-maven-plugin true http://192.168.10.10:2375 false
                <!-- 推送至指定镜像仓库(公共仓库、阿里云仓库、私有仓库等) -->
                <publishRegistry>
                    <username>用户名</username>
                    <password>密码</password>
                    <url>仓库地址</url>
                </publishRegistry>
            </docker>
            <!-- 镜像配置 -->
            <image>
                <!-- 镜像名:版本号 -->
                <name>${project.artifactId}:${project.version}</name>
                <!-- 执行完 build 自动 push -->
                <publish>true</publish>
            </image>
        </configuration>
    </plugin>
</plugins>
执行以下命令进行镜像构建和推送:

mvn spring-boot:build-image -Dmaven.test.skip=true

网络问题

构建过程中需要从 github 下载相关的依赖,这个过程大概率会失败。建议通过配置代理或者使用国外 ECS 来解决。

[INFO] Building image 'docker.io/library/spring-boot-docker:1.0-SNAPSHOT'
[INFO]
[INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder:base' 100%
[INFO]  > Pulled builder image 'paketobuildpacks/builder@sha256:c9141bd56f3e837a9d618c9e6748b8d5ab0783728a4924bbca41c7e8f
b21fca5'
[INFO]  > Pulling run image 'docker.io/paketobuildpacks/run:base-cnb' 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值