当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2023-12-03 16:20:44 343观看
导读引言随着技术的发展,应用程序的部署方式也在不断演变。传统的部署方式需要为每个应用程序提供一台独立的机器,并确保机器的配置满足应用程序的运行需求。然而,引入了容器的概念后,开发者在面对这个问题时有了更好的解决方

引言

随着技术的发展,应用程序的部署方式也在不断演变。传统的部署方式需要为每个应用程序提供一台独立的机器,并确保机器的配置满足应用程序的运行需求。EHc28资讯网——每日最新资讯28at.com

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

因此,今天我们介绍三种构建Spring Boot应用程序的Docker镜像的机制:Spring Boot构建插件;Fabric8 Maven插件;JIB Maven插件。EHc28资讯网——每日最新资讯28at.com

创建应用程序

访问https://start.spring.io,并创建一个仅包含spring-web依赖项的应用程序。EHc28资讯网——每日最新资讯28at.com

添加一个简单的控制器来接受一些请求。EHc28资讯网——每日最新资讯28at.com

@RestController@SpringBootApplicationpublic 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"。EHc28资讯网——每日最新资讯28at.com

接下来,使用Spring Boot构建插件构建我们的Docker镜像。EHc28资讯网——每日最新资讯28at.com

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

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

现在,Spring Boot的构建插件使用BuildPack构建器镜像,会自动检测到它是一个Spring Boot应用程序,并构建相关的镜像。EHc28资讯网——每日最新资讯28at.com

只需要使用Maven在Spring Boot应用程序上调用image-build目标即可。EHc28资讯网——每日最新资讯28at.com

mvn spring-boot:build-image

这将从BuildPacks中拉取基础构建器镜像,以检测应用程序的类型并选择适用于该应用程序的构建包。然后,它使用所选的构建包构建您的最终镜像。EHc28资讯网——每日最新资讯28at.com

这里是一个显示构建包所需的构建过程的日志。EHc28资讯网——每日最新资讯28at.com

===> 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'

可以使用参数指定最终镜像的名称,如下所示:EHc28资讯网——每日最新资讯28at.com

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

或者可以在配置中指定,如下所示:EHc28资讯网——每日最新资讯28at.com

<plugin>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-maven-plugin</artifactId>   <configuration>      <imageName>my-spring-boot-image</imageName>   </configuration></plugin>

现在,可以在这里进行一些级别的自定义。如果想真正自定义镜像的构建过程,需要创建自己的构建器镜像来定义构建过程。EHc28资讯网——每日最新资讯28at.com

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

Fabric8 Maven插件为构建和部署Java应用程序提供了一种简化的方法,包括创建Docker镜像。EHc28资讯网——每日最新资讯28at.com

首先,需要在pom.xml文件中添加Fabric8 Maven插件的依赖项。EHc28资讯网——每日最新资讯28at.com

<plugin>   <groupId>io.fabric8</groupId>   <artifactId>docker-maven-plugin</artifactId>   <version>0.37.0</version>   <executions>      <execution>         <id>docker-build</id>         <phase>package</phase>         <goals>            <goal>build</goal>         </goals>      </execution>   </executions>   <configuration>      <images>         <image>            <name>my-spring-boot-image</name>            <build>               <from>openjdk:11-jdk-slim</from>               <tags>                  <tag>latest</tag>               </tags>               <assembly>                  <descriptorRef>artifact</descriptorRef>               </assembly>            </build>         </image>      </images>   </configuration></plugin>

配置部分非常简单。让我们看一下<build>部分中的一些重要部分。EHc28资讯网——每日最新资讯28at.com

在<from>标签中,指定了基础镜像,然后在<assembly>部分指定了镜像的组装方式。EHc28资讯网——每日最新资讯28at.com

在assembly部分,使用值为artifact的<descriptorRef>来指定我们只想复制构建的artifact,并使用<name>标签指定它将被复制到目标镜像中的位置。由于这里构建了一个单独的fat jar,只需复制artifact。EHc28资讯网——每日最新资讯28at.com

最后,指定<cmd>来运行被复制的jar文件。EHc28资讯网——每日最新资讯28at.com

运行maven构建命令后,镜像将被构建。EHc28资讯网——每日最新资讯28at.com

检查镜像的层,发现artifact被复制为最后一层,如下所示。EHc28资讯网——每日最新资讯28at.com

图片图片EHc28资讯网——每日最新资讯28at.com

可以创建分层的Docker镜像,通过在assembly标签中指定要创建的层以及需要在这些层中复制的内容。EHc28资讯网——每日最新资讯28at.com

现在,可以使用docker run -p 8080:8080 service-docker-image-build:0.0.1-SNAPSHOT简单地运行docker文件。EHc28资讯网——每日最新资讯28at.com

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

让我们来看看来自Google的JIB插件。它是由Google提供和维护的工具之一,提供了相当详细的自定义级别。EHc28资讯网——每日最新资讯28at.com

<build>   <plugins>      <plugin>         <groupId>com.google.cloud.tools</groupId>         <artifactId>jib-maven-plugin</artifactId>         <version>3.2.1</version>         <configuration>            <from>               <image>openjdk:17</image>            </from>            <to>               <image>jib-build-${project.name}:${project.version}</image>            </to>         </configuration>         <executions>            <execution>               <phase>verify</phase>               <goals>                  <goal>dockerBuild</goal>               </goals>            </execution>         </executions>      </plugin>   </plugins></build>

这里,在<from>标签中指定了所需的基础镜像,而在<to>标签中指定了最终镜像的名称。EHc28资讯网——每日最新资讯28at.com

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

来看看创建的镜像的层次结构。EHc28资讯网——每日最新资讯28at.com

图片图片EHc28资讯网——每日最新资讯28at.com

图像的层次结构如下所示:EHc28资讯网——每日最新资讯28at.com

  • 第 1 层:包含所有依赖项。
  • 第 2 层:包含应用程序资源。
  • 第 3 层:包含应用程序类。
  • 第 4 层:包含jib-classpath-file,其中包含类路径信息,以及jib-main-class-file,其中包含要执行的完全限定的主类的名称。

本文链接:http://www.28at.com/showinfo-26-36472-0.html无需Docker File,用三种方式创建Spring Boot应用的Docker镜像

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: realme 真我 GT5 Pro 手机全系内存标配 USB 3.2,提供 1TB 版本

下一篇: 中国助残志愿者协会联合无障碍智库全程指导,腾讯前海总部攻坚无障碍环境认证最高等级

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
Top