文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

无需Docker File,用三种方式创建Spring Boot应用的Docker镜像

2024-11-30 04:04

关注

然而,引入了容器的概念后,开发者在面对这个问题时有了更好的解决方案。容器将整个软件堆栈打包成一个独立的实体,并可以方便地进行部署,不再受限于"在我的机器上可以运行"的问题。

因此,今天我们介绍三种构建Spring Boot应用程序的Docker镜像的机制:Spring Boot构建插件;Fabric8 Maven插件;JIB Maven插件。

创建应用程序

访问https://start.spring.io,并创建一个仅包含spring-web依赖项的应用程序。

添加一个简单的控制器来接受一些请求。

@RestController
@SpringBootApplication
public class ServiceDockerImageBuildApplication {

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

   @GetMapping("/")
   public ResponseEntity get(){
      return ResponseEntity.ok("All Ok");
   }
}

当运行这个应用程序并打开"http://localhost:8080"时,会得到一个响应"All Ok"。

接下来,使用Spring Boot构建插件构建我们的Docker镜像。

1 使用Spring Boot构建插件构建Docker镜像

Spring Boot的构建插件提供了一种使用BuildPacks概念创建Docker镜像的方法。Build Packs提供了一种定义应用程序构建方式的方法。它会检测应用程序的类型并进行构建,以便在特定平台上或独立于平台运行。

现在,Spring Boot的构建插件使用BuildPack构建器镜像,会自动检测到它是一个Spring Boot应用程序,并构建相关的镜像。

只需要使用Maven在Spring Boot应用程序上调用image-build目标即可。

mvn spring-boot:build-image

这将从BuildPacks中拉取基础构建器镜像,以检测应用程序的类型并选择适用于该应用程序的构建包。然后,它使用所选的构建包构建您的最终镜像。

这里是一个显示构建包所需的构建过程的日志。

===> DETECTING
[INFO]     [creator]     6 of 24 buildpacks participating
[INFO]     [creator]     paketo-buildpacks/ca-certificates   3.2.4
[INFO]     [creator]     paketo-buildpacks/bellsoft-liberica 9.3.7
[INFO]     [creator]     paketo-buildpacks/syft              1.12.0
[INFO]     [creator]     paketo-buildpacks/executable-jar    6.2.4
[INFO]     [creator]     paketo-buildpacks/dist-zip          5.2.4
[INFO]     [creator]     paketo-buildpacks/spring-boot       5.12.0
...
...
[INFO] Successfully built image 'docker.io/library/service-docker-image-build:0.0.1-SNAPSHOT'

可以使用参数指定最终镜像的名称,如下所示:

mvn spring-boot:build-image \
-Dspring-boot.build-image.imageName=my-spring-boot-image

或者可以在配置中指定,如下所示:


   org.springframework.boot
   spring-boot-maven-plugin
   
      my-spring-boot-image
   

现在,可以在这里进行一些级别的自定义。如果想真正自定义镜像的构建过程,需要创建自己的构建器镜像来定义构建过程。

2 使用Fabric8 Maven插件构建Docker镜像

Fabric8 Maven插件为构建和部署Java应用程序提供了一种简化的方法,包括创建Docker镜像。

首先,需要在pom.xml文件中添加Fabric8 Maven插件的依赖项。


   io.fabric8
   docker-maven-plugin
   0.37.0
   
      
         docker-build
         package
         
            build
         
      
   
   
      
         
            my-spring-boot-image
            
               openjdk:11-jdk-slim
               
                  latest
               
               
                  artifact
               
            
         
      
   

配置部分非常简单。让我们看一下部分中的一些重要部分。

标签中,指定了基础镜像,然后在部分指定了镜像的组装方式。

在assembly部分,使用值为artifact的来指定我们只想复制构建的artifact,并使用标签指定它将被复制到目标镜像中的位置。由于这里构建了一个单独的fat jar,只需复制artifact。

最后,指定来运行被复制的jar文件。

运行maven构建命令后,镜像将被构建。

检查镜像的层,发现artifact被复制为最后一层,如下所示。

图片

可以创建分层的Docker镜像,通过在assembly标签中指定要创建的层以及需要在这些层中复制的内容。

现在,可以使用docker run -p 8080:8080 service-docker-image-build:0.0.1-SNAPSHOT简单地运行docker文件。

3 使用Google的JIB插件构建Docker镜像

让我们来看看来自Google的JIB插件。它是由Google提供和维护的工具之一,提供了相当详细的自定义级别。


   
      
         com.google.cloud.tools
         jib-maven-plugin
         3.2.1
         
            
               openjdk:17
            
            
               jib-build-${project.name}:${project.version}
            
         
         
            
               verify
               
                  dockerBuild
               
            
         
      
   

这里,在标签中指定了所需的基础镜像,而在标签中指定了最终镜像的名称。

现在,在部分中使用了dockerBuild目标,这样Docker镜像将会构建到本地Docker守护程序中。如果使用build目标,JIB插件将会构建Docker镜像并将其推送到相应的仓库。它支持所有主要的仓库,如docker.io、AWS ECR、Google GCR、Azure ACR等。为此,可以设置身份验证机制以推送镜像。

来看看创建的镜像的层次结构。

图片

图像的层次结构如下所示:

来源:Java学研大本营内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯