当前位置:   article > 正文

Spring Boot 多样化构建 Docker 镜像_spring boot多阶段构建 docker 镜像产生多个镜像

spring boot多阶段构建 docker 镜像产生多个镜像

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

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

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

下面我们一起学习如何通过这几种方式把 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

配置文件

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

启动类

@SpringBootApplication
public class SpringBootDockerApplication {
   

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

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

控制层

@RestController
public class DockerController {
   

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

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

启动访问

启动项目,浏览器访问: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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
执行以下命令进行镜像构建和推送:

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' 
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/388964
推荐阅读
相关标签
  

闽ICP备14008679号