iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >Spring Boot Docker打包工具小结
  • 591
分享到

Spring Boot Docker打包工具小结

2024-04-02 19:04:59 591人浏览 泡泡鱼
摘要

目录Spring Boot Dockerspring-boot-Maven-pluginSpotify Maven PluginJib Maven Plugin 最近公司的应用准备容

最近公司的应用准备容器化,因为几十个应用从测试到发布太麻烦了,而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境,就引进了容器技术,先拿边缘的项目试试水,积累下经验,今天对几种常见的Spring Boot Docker打包工具进行了简单总结

Spring Boot Docker

在Spring Boot应用中,我们可以约定不同的标识来定义不同的环境。例如 dev 表示开发环境、test表示测试环境,对应的配置文件为apppcation-dev.yaml、apppcation-test.yaml。我们通过声明spring.profiles.active来激活对应的环境配置,例如激活dev环境时spring.profiles.active=dev。完整的启动命令为:


java -Djava.security.egd=file:/dev/./urandom  -Dspring.profiles.active=dev -jar spring-boot-app.jar  

根据上面的命令编写一个能够适应多环境的Dockerfile:


# 引入 openjdk 镜像 
FROM adoptopenjdk/openjdk8 
# 声明作者 
LABEL AUTHOR=felord OG=felord.cn 
# 挂载几个有用的文件夹 比如日志 
VOLUME ["/tmp","/logs"] 
# 声明一个环境参数用来动态启用配置文件 默认dev 
ENV ACTIVE=dev 
# 暴露端口 
EXPOSE 8080 
# 复制并修改应用打包后的jar文件名称 
ADD /target/flyway-spring-boot-1.0.0.jar app.jar 
# 容器启动时第一个运行的命令 用来启动应用 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=${ACTIVE}","-jar","app.jar"] 

这样打包的Docker镜像就可以通过docker run添加额外的--env ACTIVE=test 来动态的改变环境。单纯的编写Dockerfile不方便我们devops

docker 镜像生命周期

我们需要能够自动地构建、推送到仓库、拉取镜像、运行一系列流水线操作。好在市面上有很多工具来帮助我们实现这一过程。

spring-boot-maven-plugin

这个是Spring Boot官方的插件,在2.x的某个版本提供了Docker镜像构建能力。


<project> 
 <build> 
  <plugins> 
   <plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
     <image> 
     <name>docker.repo.com/library/${project.artifactId}:${project.version}</name> 
      <publish>true</publish> 
     </image> 
     <docker> 
      <publishReGIStry> 
       <username>user</username> 
       <passWord>secret</password> 
       <url>https://docker.repo.com/v1/</url> 
       <email>user@example.com</email> 
      </publishRegistry> 
     </docker> 
    </configuration> 
   </plugin> 
  </plugins> 
 </build> 
</project>

配置好Docker私仓后就可以通过mvn clean spring-boot:build-image 进行构建镜像了。

这种方式好处就是无额外依赖,缺点就是需要从GitHub下载构建元件,网络如果不好就容易失败。

Spotify Maven Plugin

Spotify Maven 插件是一个目前比较普遍的选择。它要求应用程序开发人员编写Dockerfile,并把Dockerfile放在项目src/main/docker目录下。然后你就可以通过引入:


<plugin> 
          <groupId>com.spotify</groupId> 
          <artifactId>dockerfile-maven-plugin</artifactId> 
          <version>1.4.8</version> 
          <configuration> 
              <repository>repo.com/${project.artifactId}</repository> 
          </configuration> 
      </plugin> 

这个插件提供了mvn dockerfile:build、mvn dockerfile:tag、mvn dockerfile:push三个命令分别用来构建、打标签、发布到远端私有仓库,非常简单。

这个是一个非常容易上手的插件,唯一的要求就是需要会编写Dockerfile,对定制化要求高的可以使用这个。

Jib Maven Plugin

这个曾经我在早些时候的一篇文章中已经介绍过了,可以详细了解一下。它是谷歌开源的OCI镜像打包工具,可以用来打包Docker镜像,大部分情况下已经满足需要。但是如果你要定制化的话还是不容易的,需要阅读官方给的文档。最开始的Dockerfile如果使用JIb的话需要这样配置:


<plugin> 
    <groupId>com.Google.cloud.tools</groupId> 
    <artifactId>jib-maven-plugin</artifactId> 
    <version>3.0.0</version> 
    <configuration> 
        <from> 
            <image>adoptopenjdk/openjdk8</image> 
        </from> 
        <to> 
            <image>docker.repo.com/library/${project.artifactId}</image> 
            <auth> 
                <username>felord</username> 
                <password>xxxxxx</password> 
            </auth> 
            <tags> 
                <tag>${project.version}</tag> 
            </tags> 
        </to> 
        <extraDirectories> 
            <paths> 
                <path> 
                    <from>target/${project.artifactId}-${project.version}.jar</from> 
                    <includes>*.jar</includes> 
                    <into>/app.jar</into> 
                </path> 
            </paths> 
        </extraDirectories> 
        <containerizingMode>packaged</containerizingMode> 
        <container> 
            <volumes>/tmp,/logs</volumes> 
            <ports> 
                <port>8080</port> 
            </ports> 
            <environment> 
                <active>dev</active> 
            </environment> 
            <entrypoint> 
                java,-Djava.security.egd=file:/dev/./urandom,-Dspring.profiles.active=${active},-jar,/app.jar 
            </entrypoint> 
            <creationTime>USE_CURRENT_TIMESTAMP</creationTime> 
        </container> 
    </configuration> 
</plugin> 

优点是不需要本地Docker环境,而且支持分层构建、镜像瘦身,上手容易;缺点是定制化比较困难。

到此这篇关于Spring Boot的 Docker打包插件哪个好用的文章就介绍到这了,更多相关Spring Boot Docker打包插件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring Boot Docker打包工具小结

本文链接: https://www.lsjlt.com/news/125273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring Boot Docker打包工具小结
    目录Spring Boot Dockerspring-boot-maven-pluginSpotify Maven PluginJib Maven Plugin 最近公司的应用准备容...
    99+
    2024-04-02
  • Spring Boot Docker打包工具有哪些
    这篇文章给大家分享的是有关Spring Boot Docker打包工具有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。springboot是什么springboot一种全新的编程规范,其设计目的是用来简化新S...
    99+
    2023-06-14
  • Spring Boot 打包上传Docker 仓库的详细步骤
    重要提示:学习本文之前需要提前了解docker容器相关的知识,了解和熟练运用常用的docker操作命令,如果已经了解了docker容器相关的知识那我们就开搞吧! 以下是完成标题所述功...
    99+
    2024-04-02
  • Spring Boot使用Docker分层打包的设置方法
    Spring Boot项目使用docker容器, jar和war的分层打包。 Spring Boot 现在支持分层打包技术了, 我们也来用一用, 加速Docker打包, 构建的时候速...
    99+
    2024-04-02
  • Spring Boot 分层打包 Docker 镜像实践及分析(推荐)
    目录1.准备springboot项目2.进行相关配置3.package4.Dockerfile5.应用程序修改&dive分析1. 准备 spring boot 项目 简单,略...
    99+
    2024-04-02
  • Mybatisplus创建Spring Boot工程打包错误的解决方式
    目录 创建Spring Boot工程a.初始化工程b.引入依赖编写代码a.配置application.ymlb.启动类总结 创建Spring Boot工程 a.初...
    99+
    2023-03-15
    springboot打包报错 springboot打包运行 springboot项目如何打包
  • Java打包工具jar包详解
    Java打包工具是Java开发工具中比较常用的一种,代码重新打包工具jarjar可以帮助你将其它用到的java库打包并嵌入到你自己的项目jar包中。这样做的原因有: 当你发布项目的时...
    99+
    2024-04-02
  • 怎么进行Spring Boot 分层打包Docker 镜像实践及分析
    本篇文章给大家分享的是有关怎么进行Spring Boot 分层打包Docker 镜像实践及分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. ...
    99+
    2023-06-22
  • Spring Boot 集成接口管理工具 Knife4j
    目录前言集成过程创建 Spring Boot 项目添加依赖配置添加编写 Controller 层启动测试踩过的坑空指针异常请求路径未找到总结前言 之前介绍了如何在 Spring Bo...
    99+
    2024-04-02
  • python打包分发工具setuptoo
      关于python setup.py文件的编写技巧 环境:最新版setuptools,初步认识setuptools可以参考这篇文章 1. 自定义命令 from setuptools import setup, Command cl...
    99+
    2023-01-30
    工具 python setuptoo
  • vue打包工具有哪些
    vue中的打包工具有:1.parcel,于vue的Web应用打包工具;2.Weex,可以使用现代化的Web技术开发高性能原生应用的框架;3.webpack,基于vue的模块打包器;vue中常见的打包工具有以下几种parcelparcel是一...
    99+
    2024-04-02
  • Dockerfile中编译、打包、部署spring boot项目
    1、Dockerfile 1.1、什么是Dockerfile         Dockerfile是自动构建docker镜像的配置文件,将镜像构建过程通过指令的方式定义在Dockerfile中。配合docker build命令行可以实现自动...
    99+
    2023-09-05
    spring boot 后端 java
  • 使用Spring boot怎么打包部署应用
    今天就跟大家聊聊有关使用Spring boot怎么打包部署应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、Spring Boot内置webSpring Boot 其默认是集成w...
    99+
    2023-05-30
    springboot
  • python的一个打包工具cx_Freeze
    cx_Freeze是一个用于将Python脚本打包为独立可执行文件的开源库。它可以将Python程序及其依赖项(包括标准库和第三方库)打包成一个独立的可执行文件或目录,以便在没有Python解释器的环...
    99+
    2023-10-20
    python 开发语言
  • App与小程序工具总结
    文章目录 前言Burpsuite抓包问题LPosed+JustTrustMe 绕过 SSL Pining小程序的反编译APP脱壳,反射大师、frida反射大师Frida 总结 前言 ...
    99+
    2023-09-06
    小程序 web安全 web app
  • Python3小工具——结合nmap扫描
    一、工具说明调用nmap库实现端口扫描二、演示一下的利用效果三、代码+注释import nmap import argparse def nmapScan(Host, Port):     # 调用nmap的PortScanner类   ...
    99+
    2023-01-31
    小工具 nmap
  • Spring Boot打的包为什么能直接运行
    这篇文章主要讲解了“Spring Boot打的包为什么能直接运行”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot打的包为什么能直接运行”吧!Spring Boot 提供了...
    99+
    2023-06-16
  • Java中的打包工具有哪些?如何选择最适合自己的打包工具?
    Java是一门广泛使用的编程语言,应用范围涉及到桌面应用程序、Web应用程序、移动应用程序等多个领域。在Java开发中,打包工具是不可或缺的一部分。本文将介绍Java中的打包工具有哪些,以及如何选择最适合自己的打包工具。 一、Java中的打...
    99+
    2023-09-13
    日志 数据类型 打包
  • intellij idea 2021.2 打包并上传运行spring boot项目的详细过程(spring boot 2.5.4)
    目录一在idea中打开项目:二上传jar包到服务器并运行:三查看intellij idea的版本:四查看spring boot的版本:五查看服务端的java版本:一在idea中打开项...
    99+
    2024-04-02
  • SpringCloud-Spring Boot Starter使用测试及问题小结
    目录Spring Boot Starter是什么?以前传统的做法使用 Spring Boot Starter 之后starter 的理念:starter 的实现:创建Spring B...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作