文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Spring Boot的 Docker打包插件哪个好用

2024-12-03 05:58

关注

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

Spring Boot Docker

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

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

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

  1. # 引入 openjdk 镜像 
  2. FROM adoptopenjdk/openjdk8 
  3. # 声明作者 
  4. LABEL AUTHOR=felord OG=felord.cn 
  5. # 挂载几个有用的文件夹 比如日志 
  6. VOLUME ["/tmp","/logs"
  7. # 声明一个环境参数用来动态启用配置文件 默认dev 
  8. ENV ACTIVE=dev 
  9. # 暴露端口 
  10. EXPOSE 8080 
  11. # 复制并修改应用打包后的jar文件名称 
  12. ADD /target/flyway-spring-boot-1.0.0.jar app.jar 
  13. # 容器启动时第一个运行的命令 用来启动应用 
  14. 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镜像构建能力。

  1.  
  2.   
  3.    
  4.     
  5.     org.springframework.boot 
  6.     spring-boot-maven-plugin 
  7.      
  8.       
  9.      <name>docker.repo.com/library/${project.artifactId}:${project.version}name
  10.       true 
  11.       
  12.       
  13.        
  14.        user 
  15.        <password>secretpassword
  16.        https://docker.repo.com/v1/ 
  17.        user@example.com 
  18.        
  19.       
  20.      
  21.     
  22.    
  23.   
  24.  

 

 

 

 

 

 

 

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

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

Spotify Maven Plugin

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

  1.  
  2.           com.spotify 
  3.           dockerfile-maven-plugin 
  4.           1.4.8 
  5.            
  6.               repo.com/${project.artifactId} 
  7.            
  8.        

 

 

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

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

Jib Maven Plugin

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

  1.  
  2.     com.google.cloud.tools 
  3.     jib-maven-plugin 
  4.     3.0.0 
  5.      
  6.         <from
  7.             adoptopenjdk/openjdk8 
  8.         from
  9.         <to
  10.             docker.repo.com/library/${project.artifactId} 
  11.              
  12.                 felord 
  13.                 <password>xxxxxxpassword
  14.              
  15.              
  16.                 ${project.version} 
  17.              
  18.         to
  19.          
  20.              
  21.                  
  22.                     <from>target/${project.artifactId}-${project.version}.jarfrom
  23.                     *.jar 
  24.                     <into>/app.jarinto
  25.                  
  26.              
  27.          
  28.         packaged 
  29.          
  30.             /tmp,/logs 
  31.              
  32.                 8080 
  33.              
  34.              
  35.                 dev 
  36.              
  37.              
  38.                 java,-Djava.security.egd=file:/dev/./urandom,-Dspring.profiles.active=${active},-jar,/app.jar 
  39.              
  40.             USE_CURRENT_TIMESTAMP 
  41.          
  42.      
  43.  

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

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

来源:码农小胖哥内容投诉

免责声明:

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

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

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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